成员的可访问域指定程序段中可以引用成员的位置。如果成员嵌套在其他类型中,其可访问域由该成员的可访问性级别和直接包含类型的可访问域共同确定。
顶级类型的可访问域至少是声明它的项目的程序文本,即该项目的整个源文件。嵌套类型的可访问域至少是声明它的类型的程序文本,即包括任何嵌套类型的类型体。嵌套类型的可访问域决不能超出包含类型的可访问域。这些概念在以下示例中加以说明。
示例
该示例包含一个顶级类型 T1 和两个嵌套类 M1 和 M2。这两个类包含具有不同声明的可访问性的字段。在 Main 方法中,每个语句后都有注释,指示每个成员的可访问域。注意,试图引用不可访问的成员的语句被注释掉了。如果希望查看由引用不可访问的成员所导致的编译器错误,请逐个移除注释。
复制代码 | |
|---|---|
// cs_Accessibility_Domain.cs
using System;
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.2.3 访问修饰符
-
10.2.6.2 声明的可访问性
请参见