アクセシビリティ ドメイン (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# リファレンス)