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