可访问域(C# 参考)
成员的可访问域指定程序中可以引用成员的部分。 如果成员嵌套在其他类型中,其可访问域由该成员的可访问性级别和直接包含类型的可访问域共同确定。
顶级类型的可访问域至少是声明它的项目的程序文本。 也就是说,域包括此项目的所有源文件。 嵌套类型的可访问域至少是声明它的类型的程序文本, 即域是一个类型体,包括所有嵌套的类型。 嵌套类型的可访问域决不能超出包含类型的可访问域。 这些概念在以下示例中加以说明。
示例
该示例包含一个顶级类型 T1 和两个嵌套类 M1 和 M2。 这两个类包含具有不同声明的可访问性的字段。 在 Main 方法中,每个语句后都有注释,指示每个成员的可访问域。 注意,尝试引用不可访问的成员的语句被注释掉了。 如果希望查看由引用不可访问的成员所导致的编译器错误,请逐个移除注释。
namespace AccessibilityDomainNamespace
{
public class T1
{
public static int publicInt;
internal static int internalInt;
private static int privateInt = 0;
static T1()
{
// T1 can access public or internal members
// in a public or private (or internal) nested class
M1.publicInt = 1;
M1.internalInt = 2;
M2.publicInt = 3;
M2.internalInt = 4;
// Cannot access the private member privateInt
// in either class:
// M1.privateInt = 2; //CS0122
}
public class M1
{
public static int publicInt;
internal static int internalInt;
private static int privateInt = 0;
}
private class M2
{
public static int publicInt = 0;
internal static int internalInt = 0;
private static int privateInt = 0;
}
}
class MainClass
{
static void Main()
{
// Access is unlimited:
T1.publicInt = 1;
// Accessible only in current assembly:
T1.internalInt = 2;
// Error CS0122: inaccessible outside T1:
// T1.privateInt = 3;
// Access is unlimited:
T1.M1.publicInt = 1;
// Accessible only in current assembly:
T1.M1.internalInt = 2;
// Error CS0122: inaccessible outside M1:
// T1.M1.privateInt = 3;
// Error CS0122: inaccessible outside T1:
// T1.M2.publicInt = 1;
// Error CS0122: inaccessible outside T1:
// T1.M2.internalInt = 2;
// Error CS0122: inaccessible outside M2:
// T1.M2.privateInt = 3;
// Keep the console open in debug mode.
System.Console.WriteLine("Press any key to exit.");
System.Console.ReadKey();
}
}
}
C# 语言规范
有关更多信息,请参见 C# 语言规范。该语言规范是 C# 语法和用法的权威资料。