访问修饰符是任何面向对象编程中的必备工具。访问修饰符用于保护你的数据,通过使用它们与数据成员和成员函数。这些访问修饰符是:公共的、私有的、受保护的和内部的,根据来源。内部访问修饰符的作用与私有访问成员的作用相同,但在不同的编程层次上。私有修改器在类的层面上工作,而内部修改器在汇编层面上工作。今天,我们将讨论内部访问修改器的使用。

例子01
在使用内部访问修饰符之前,我们首先要看一下C#编程中的 "私有 "访问修饰符。所以,我们一直在使用名为 "New "的用户定义命名空间,包含两个类。类 "Test "包含main()函数来开始执行这段代码。这个main()驱动函数中的Console.WriteLine()语句用于在我们的屏幕上显示文本 "测试类的主方法"。一个 "New "类的对象 "obj "已经用该类名创建。类 "New "包含一个整数类型的私有数据成员 "x",其值为 "14"。这意味着变量 "x "的值不能被其他类的任何函数访问,即使它们是派生的。
main()函数正在使用New类的对象 "obj "来更新 "New "类的私有数据成员 "x "的值,也就是说,现在不可能。在main()方法中用对象 "obj "调用show()函数后,必须执行带有 "public "访问修改器的show()方法。因为有 "x "变量的私有访问修饰符,所以看起来并不像这样。两个类都完成了,代码也可以使用了。我们必须先用Ctrl+S保存它,然后用文本编辑器的十字符号关闭它,退出编辑器。

代码保存后,你必须用Linux中已经配置好的 "mcs "C#编译器来编译它。这个必经的步骤告诉我们,错误发生在我们的C#代码的第12行,即变量 "x "不能在Test类中被访问,因为它是用私有访问修饰符定义的。因此,我们需要修复这个错误。

我们在文本编辑器中再次打开C#文件,更新了代码,将变量 "x "的私有访问修饰符替换为公共访问修饰符。我们将不改变其余的代码,因为它不是必需的。因此,我们再次保存了新更新的代码。

当我们在shell上使用mcs编译器命令,并在后面加上一个C#文件的名字时,代码被成功编译了。之后,我们在shell上执行了由C#编译器创建的 "exe "文件,输出被显示出来,即一个 "x "的值被更新。

例子02
现在,我们将看看如何使用内部访问修饰符来定义C#代码类中一些变量的范围。因此,我们在这个C#例子中加入了System库,并在其中创建了一个命名空间 "New"。这个命名空间包含两个独立的类,分别名为 "New "和 "Test"。类 "Test "包含main()驱动代码函数,而 "New "类包含整数变量 "x",其值为14,定义有内部访问修改器和show()函数。新类对象 "obj "是用 "new "关键字和一个类的名称来生成的。这个新的类对象在下一行被利用来更新 "x "变量的值 "0"。
现在,变量 "x "将被成功更新,因为变量 "x "是在同一命名空间组件 "New "中用内部访问修改器定义的。show()函数已经用这个相同的对象 "obj "被调用。当show()函数被执行时,它将通过Console.WriteLine()函数语句在外壳上显示 "x "的更新值。

现在是时候用Ctrl+S快速保存我们的代码文件,并再次返回到终端。我们一直在运行C#代码编译的 "mcs "命令,在shell中运行 "internal.cs "文件。这个编译已经成功了,并且在我们当前的工作目录中已经创建了内部.cs的编译 "exe "文件。我们使用该 "exe "文件在shell中用 "mono "运行时命令来运行它。输出已成功显示如下。根据显示的字符串,main()函数首先被执行,之后,变量 "x "的更新值 "0 "被成功显示。

这就是内部访问修饰符在C#代码中在同一命名空间内使用时的工作方式。让我们对我们的代码进行修改,看看内部访问修改器在多个汇编中使用时是如何影响C#代码的执行的。你在同一C#代码中创建了两个命名空间,即New和Test。在New命名空间中,我们创建了一个New类,并将内部访问修饰符的一个变量 "x "初始化为值14。New命名空间的同一个类包含show()函数来显示 "x "的值。
另一方面,命名空间Test包含一个有main()函数的类Test。这个main()函数正在从另一个命名空间 "New "创建一个New类的对象。同一对象被用来修改变量 "x "的值,并调用show()函数来显示变量 "x "的更新值。现在,变量 "x "被定义在命名空间 "New "中,而该对象正试图在另一个命名空间 "Test "中访问它。由于变量 "x "的内部访问修改器,我们可能会遇到一个错误。现在让我们来看看。

编译这段代码后,我们得到了预期的错误,即类型保护。

为了避免在编译时出现这个错误,我们必须像上一段代码中那样更新代码。因此,我们从代码中删除了命名空间 "New",而没有删除代码中的Test命名空间,如下图所示。

经过这次更新后的代码编译和执行,它被成功执行,并在shell上显示了变量 "x "的修改值,不管它的内部类型如何。

总结
我们已经完成了在C#中实现内部访问修改器的例子。我们以讨论私有访问修饰符的例子开始这篇文章,以比较它和内部访问修饰符,因为两者在不同的编程水平上做同样的工作。我们尝试在同一命名空间、两个不同的命名空间以及没有在类中定义命名空间的情况下使用内部访问修饰符。我们已经阐述了它在C#中保护数据成员变量和函数的用途。