更新:2007 年 11 月
成员的可访问域指定程序中可以引用成员的部分。如果成员嵌套在其他类型中,其可访问域由该成员的
顶级类型的可访问域至少是声明此类型的项目的程序文本。也就是说,域包括此项目的所有源文件。嵌套类型的可访问域至少是声明它的类型的程序文本,即域是一个类型体,包括所有嵌套的类型。嵌套类型的可访问域决不能超出包含类型的可访问域。这些概念在以下示例中加以说明。
示例
该示例包含一个顶级类型 T1 和两个嵌套类 M1 和 M2。这两个类包含具有不同声明的可访问性的字段。在 Main 方法中,每个语句后都有注释,指示每个成员的可访问域。注意,尝试引用不可访问的成员的语句被注释掉了。如果希望查看由引用不可访问的成员所导致的编译器错误,请逐个移除注释。
C# | 复制代码 |
---|---|
namespace AccessibilityDomainNamespace { public class T1 { public static int publicInt; internal static int internalInt; private static int privateInt = 0; // CS0414 public class M1 { public static int publicInt; internal static int internalInt; private static int privateInt = 0; // CS0414 } private class M2 { public static int publicInt = 0; internal static int internalInt = 0; private static int privateInt = 0; // CS0414 } } class MainClass { static void Main() { // Access is unlimited: T1.publicInt = 1; // Accessible only in current assembly: T1.internalInt = 2; // Error: inaccessible outside T1: // T1.myPrivateInt = 3; // Access is unlimited: T1.M1.publicInt = 1; // Accessible only in current assembly: T1.M1.internalInt = 2; // Error: inaccessible outside M1: // T1.M1.myPrivateInt = 3; // Error: inaccessible outside T1: // T1.M2.myPublicInt = 1; // Error: inaccessible outside T1: // T1.M2.myInternalInt = 2; // Error: inaccessible outside M2: // T1.M2.myPrivateInt = 3; } } } |
C# 语言规范
有关更多信息,请参见 C# 语言规范中的以下各章节:
3.5.1 声明的可访问性
3.5.2 可访问域
3.5.4 可访问性约束
10.3.5 访问修饰符
10.3.8.2 声明的可访问性