internal 关键字是类型和类型成员的访问修饰符。
只有在同一程序集的文件中,才能访问 internal 类型或成员,如以下示例所示:
public class LeiJi
{
// 只有在一个程序集中才能访问
internal static int x = 0;
}
assembly 是通过编译一个或多个源文件而生成的可执行文件或动态链接库(DLL)。
internal 访问通常用于基于组件的开发,因为它可使一组组件以私有方式进行协作,而不必向应用程序代码的其余部分公开。例如,用于生成图形用户界面的框架可以提供 Control(控件)和 Form(窗体)类,这两个类通过使用具有内部访问权限的成员进行协作。由于这些成员是内部的,因此不会向正在使用框架的代码公开。
从定义具有 internal 访问权限的类型或成员的程序集外部引用该类型或成员是错误的。
示例 1
此示例包含两个文件,即 Assembly1.cs 和 Assembly1_a.cs。 第一个文件包含内部基类 BaseClass。在第二个文件中,尝试实例化 BaseClass 会产生错误。
// 第一个 C# 文件(例如主程序里面):
// 组装1.cs
// 用 /target:library 编译
internal class BaseClass
{
public static int intM = 0;
}
// 第二个 C# 文件:
// 组装1_a.cs
// 用 /reference:Assembly1.dll 编译
class TestAccess
{
static void Main()
{
var myBase = new BaseClass ( ); // 警告 CS0122:“BaseClass”不可访问,因为它具有一定的访问级别。
}
}
示例 2
在此示例中,使用在示例 1 中所用的相同文件,并将 BaseClass 的可访问性级别更改为 public。 另将成员 intM 的可访问性级别更改为 internal。 在此例中,可以实例化类,但不能访问内部成员。
// 组装2.cs
// 编译自:/target:library
public class BaseClass
{
internal static int intM = 0;
}
// 组装2_a.cs
// 编译自:/reference:Assembly2.dll
public class TestAccess
{
static void Main()
{
var myBase = new BaseClass(); // Ok,因为 VaseClass 是 public
BaseClass . intM = 444; // CS0117,无效,因为 intM 是 internal
}
}
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。