Share via


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

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

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

使用例

この例には、トップ レベルの型 T1 と、2 つの入れ子にされたクラス M1 および M2 があります。クラスには、異なる種類の宣言されたアクセシビリティを持つフィールドがあります。Main メソッドでは、各ステートメントに続くコメントが、各メンバーのアクセシビリティ ドメインを示しています。アクセス不可のメンバーを参照しようとするステートメントがコメントになっている点に注意してください。アクセス不可のメンバーを参照したために発生したコンパイラ エラーを見るには、コメントを一度に 1 つずつ解除してください。


namespace AccessibilityDomainNamespace
{
    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# の構文と使用法に関する信頼性のある情報源です。

参照

関連項目

C# のキーワード

アクセス修飾子 (C# リファレンス)

アクセシビリティ レベル (C# リファレンス)

アクセシビリティ レベルの使用に関する制限事項 (C# リファレンス)

アクセス修飾子 (C# プログラミング ガイド)

public (C# リファレンス)

private (C# リファレンス)

protected (C# リファレンス)

internal (C# リファレンス)

概念

C# プログラミング ガイド

その他の技術情報

C# リファレンス