关键字 internal
是类型和类型成员 的访问修饰符 。
本页涵盖
internal
访问。 关键字internal
也是访问修饰符的protected internal
一部分。
内部类型或成员只能在同一 程序集中的文件中访问,如以下示例所示:
public class BaseClass
{
// Only accessible within the same assembly.
internal static int x = 0;
}
有关与其他访问修饰符的 internal
比较,请参阅 辅助功能级别 和 访问修饰符。
An assembly
是从编译一个或多个源文件生成的可执行文件或动态链接库(DLL)。
有关程序集的详细信息,请参阅 .NET 中的程序集。
内部访问的常见用途是在基于组件的开发中,因为它使一组组件能够以私有方式合作,而无需向应用程序代码的其余部分公开。 例如,用于生成图形用户界面的框架可以提供 Control
和 Form
使用具有内部访问权限的成员合作的类。 由于这些成员是内部成员,因此不会向使用框架的代码公开这些成员。
引用具有内部访问权限的类型或成员时出错,该类型或成员在定义其内部访问的程序集之外。
示例 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# 语法和用法的明确来源。