internal(C# 参考)

来源:互联网 发布:怎么找淘宝的客服聊天 编辑:程序博客网 时间:2024/05/16 09:37

internal 关键字是类型和类型成员的访问修饰符。只有在同一程序集的文件中,内部类型或成员才是可访问的,如下例所示:

public class BaseClass {    // Only accessible within the same assembly    internal static int x = 0;}

 

内部访问通常用于基于组件的开发,因为它使一组组件能够以私有方式进行合作,而不必向应用程序代码的其余部分公开。例如,用于生成图形用户界面的框架可以提供“控件”类和“窗体”类,这些类通过使用具有内部访问能力的成员进行合作。由于这些成员是内部的,它们不向正在使用框架的代码公开。

从定义具有内部访问能力的类型或成员的程序集外部引用该类型或成员是错误的。

Note注意

尽管不能用 C# 重写 internalvirtual 方法,但可以用某些语言(如使用 Ilasm.exe 的文本 Microsoft 中间语言 (MSIL))重写它。

示例

该示例包含两个文件:Assembly1.csAssembly2.cs。第一个文件包含内部基类 BaseClass。在第二个文件中,实例化 BaseClass 的尝试将产生错误。

// Assembly1.cs// compile with: /target:libraryinternal class BaseClass {   public static int intM = 0;}
// Assembly1_a.cs// compile with: /reference:Assembly1.dllclass TestAccess {   static void Main()    {      BaseClass myBase = new BaseClass();   // CS0122   }}

在此示例中,使用与示例 1 中所用的文件相同的文件,并将 BaseClass 的可访问性级别更改为 public。还将成员 IntM 的可访问性级别更改为 internal。在此例中,您可以实例化类,但不能访问内部成员。

// Assembly2.cs// compile with: /target:librarypublic class BaseClass {   internal static int intM = 0;}
// Assembly2_a.cs// compile with: /reference:Assembly1.dllpublic class TestAccess {   static void Main()    {      BaseClass myBase = new BaseClass();   // Ok.      BaseClass.intM = 444;    // CS0117   }}