成员的辅助功能域指定可以引用成员的程序节。 如果该成员嵌套在另一种类型中,则其辅助功能域由成员的 辅助功能级别 和立即包含类型的辅助功能域确定。
顶级类型的辅助功能域至少是项目声明的程序文本。 也就是说,域包括此项目的所有源文件。 嵌套类型的辅助功能域至少是声明它的类型的程序文本。 也就是说,域是类型正文,其中包括所有嵌套类型。 嵌套类型的辅助功能域永远不会超过包含类型的辅助功能域。 以下示例演示了这些概念。
示例:
此示例包含一个顶级类型, T1以及两个嵌套类和 M1M2两个嵌套类。 这些类包含具有不同声明可访问性的字段。 在 Main 方法中,注释遵循每个语句来指示每个成员的辅助功能域。 请注意,将注释掉尝试引用不可访问成员的语句。如果想要查看引用不可访问成员导致的编译器错误,请逐个删除注释。
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# 语法和用法的明确来源。