内部 (C# 参考)

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

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

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

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

有关与其他访问修饰符的 internal 比较,请参阅 辅助功能级别访问修饰符

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

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

内部访问的常见用途是在基于组件的开发中,因为它使一组组件能够以私有方式合作,而无需向应用程序代码的其余部分公开。 例如,用于生成图形用户界面的框架可以提供 ControlForm 使用具有内部访问权限的成员合作的类。 由于这些成员是内部成员,因此不会向使用框架的代码公开这些成员。

引用具有内部访问权限的类型或成员时出错,该类型或成员在定义其内部访问的程序集之外。

示例 1

此示例包含两个文件, Assembly1.cs 以及 Assembly1_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# 语法和用法的明确来源。

另请参阅