次の方法で共有


アクセシビリティ ドメイン (C# リファレンス)

メンバーのアクセシビリティ ドメインは、そのメンバーを参照できるプログラム セクションを指定します。 メンバーが別の型内に入れ子になっている場合は、メンバーの アクセシビリティ レベル と、すぐに含まれる型のアクセシビリティ ドメインの両方によって、そのアクセシビリティ ドメインが決まります。

C# 言語リファレンスには、C# 言語の最新リリース バージョンが記載されています。 また、今後の言語リリースのパブリック プレビューの機能に関する初期ドキュメントも含まれています。

このドキュメントでは、言語の最後の 3 つのバージョンまたは現在のパブリック プレビューで最初に導入された機能を特定します。

ヒント

C# で機能が初めて導入された時期を確認するには、 C# 言語バージョン履歴に関する記事を参照してください。

トップレベル型のアクセシビリティ ドメインには、常に、少なくともそれを宣言するプロジェクトのプログラム テキストが含まれます。 つまり、ドメインにはプロジェクト内のすべてのソース ファイルが含まれます。 入れ子になった型のアクセシビリティ ドメインには、少なくとも宣言する型のプログラム テキストが常に含まれます。 つまり、ドメインは型本体であり、すべての入れ子になった型が含まれます。 入れ子になった型のアクセシビリティ ドメインが、含まれる型のアクセシビリティ ドメインを超えることはありません。 次の例では、これらの概念を示します。

この例には、最上位レベルの型、 T1、および 2 つの入れ子になったクラス ( M1M2) が含まれています。 クラスには、宣言されたアクセシビリティが異なるフィールドが含まれています。 Main メソッドでは、各ステートメントの後にコメントを付けて、各メンバーのアクセシビリティ ドメインを示します。 アクセスできないメンバーを参照しようとするステートメントはコメント アウトされます。アクセスできないメンバーを参照することによって発生するコンパイラ エラーを表示する場合は、コメントを一度に 1 つずつ削除します。

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# の構文と使用法の決定的なソースです。

こちらも参照ください