辅助功能域 (C# 参考)

成员的辅助功能域指定可以引用成员的程序节。 如果该成员嵌套在另一种类型中,则其辅助功能域由成员的 辅助功能级别 和立即包含类型的辅助功能域确定。

顶级类型的辅助功能域至少是项目声明的程序文本。 也就是说,域包括此项目的所有源文件。 嵌套类型的辅助功能域至少是声明它的类型的程序文本。 也就是说,域是类型正文,其中包括所有嵌套类型。 嵌套类型的辅助功能域永远不会超过包含类型的辅助功能域。 以下示例演示了这些概念。

示例:

此示例包含一个顶级类型, 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# 语法和用法的明确来源。

另请参阅