internal(C# 参考)

internal 关键字是类型和类型成员的访问修饰符

本页涵盖 internal 访问。 internal 关键字也是 protected internal 访问修饰符的一部分。

只有在同一程序集的文件中,才能访问内部类型或成员,如以下示例所示:

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

有关 internal 和其他访问修饰符的比较,请参阅可访问性级别访问修饰符

assembly 是通过编译一个或多个源文件而生成的可执行文件或动态链接库 (DLL)。

有关程序集的详细信息,请参阅 .NET 中的程序集

内部访问通常用于基于组件的开发,因为它可使一组组件以私有方式进行协作,而不必向应用程序代码的其余部分公开。 例如,用于生成图形用户界面的框架可以提供 ControlForm 类,这两个类通过使用具有内部访问权限的成员进行协作。 由于这些成员是内部的,因此不会向正在使用框架的代码公开。

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

示例 1

此示例包含两个文件,即 Assembly1.csAssembly1_a.cs。 第一个文件包含内部基类 BaseClass。 在第二个文件中,尝试实例化 BaseClass 会产生错误。

// Assembly1.cs  
// Compile with: /target:library  
internal class BaseClass
{  
   public static int intM = 0;  
}  
// Assembly1_a.cs  
// Compile with: /reference:Assembly1.dll  
class TestAccess
{  
   static void Main()
   {  
      var myBase = new BaseClass();   // CS0122  
   }  
}  

示例 2

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

// Assembly2.cs  
// Compile with: /target:library  
public class BaseClass
{  
   internal static int intM = 0;  
}  
// Assembly2_a.cs  
// Compile with: /reference:Assembly2.dll  
public class TestAccess
{  
   static void Main()
   {  
      var myBase = new BaseClass();   // Ok.  
      BaseClass.intM = 444;    // CS0117  
   }  
}  

C# 语言规范

有关详细信息,请参阅 C# 语言规范中的声明的可访问性。 该语言规范是 C# 语法和用法的权威资料。

另请参阅