アクセシビリティ ドメイン (C# リファレンス)
更新 : 2007 年 11 月
メンバのアクセシビリティ ドメインは、プログラムのセクション内で、メンバを参照できる場所を指定します。メンバが他の型の入れ子になっている場合、そのメンバのアクセシビリティ ドメインは、メンバのアクセシビリティ レベルと、それを含む型のアクセシビリティ ドメインによって決定されます。
トップレベルの型のアクセシビリティ ドメインは、少なくとも、その型が宣言されているプログラムのプログラム テキストです。つまり、ドメインには、このプロジェクトのすべてのソース ファイルが含まれていることになります。入れ子にされた型のアクセシビリティ ドメインは、少なくとも、入れ子にされた型が宣言されている型のプログラム テキストです。つまり、ドメインは、入れ子にされたすべての型を含む、型の本体です。入れ子にされた型のアクセシビリティ ドメインは、含んでいる側の型のアクセシビリティ ドメインの外には決して出ません。これらの概念を次の例で説明します。
使用例
この例には、トップ レベルの型 T1 と、2 つの入れ子にされたクラス M1 および M2 があります。クラスには、異なる種類の宣言されたアクセシビリティを持つフィールドがあります。Main メソッドでは、各ステートメントに続くコメントが、各メンバのアクセシビリティ ドメインを示しています。アクセス不可のメンバを参照しようとするステートメントがコメントになっている点に注意してください。アクセス不可のメンバを参照したために発生したコンパイラ エラーを見るには、コメントを一度に 1 つずつ解除してください。
namespace AccessibilityDomainNamespace
{
public class T1
{
public static int publicInt;
internal static int internalInt;
private static int privateInt = 0; // CS0414
public class M1
{
public static int publicInt;
internal static int internalInt;
private static int privateInt = 0; // CS0414
}
private class M2
{
public static int publicInt = 0;
internal static int internalInt = 0;
private static int privateInt = 0; // CS0414
}
}
class MainClass
{
static void Main()
{
// Access is unlimited:
T1.publicInt = 1;
// Accessible only in current assembly:
T1.internalInt = 2;
// Error: inaccessible outside T1:
// T1.myPrivateInt = 3;
// Access is unlimited:
T1.M1.publicInt = 1;
// Accessible only in current assembly:
T1.M1.internalInt = 2;
// Error: inaccessible outside M1:
// T1.M1.myPrivateInt = 3;
// Error: inaccessible outside T1:
// T1.M2.myPublicInt = 1;
// Error: inaccessible outside T1:
// T1.M2.myInternalInt = 2;
// Error: inaccessible outside M2:
// T1.M2.myPrivateInt = 3;
}
}
}
C# 言語仕様
詳細については、「C# 言語仕様」の次のセクションを参照してください。
3.5.1 宣言されたアクセシビリティ
3.5.2 アクセシビリティ ドメイン
3.5.4 アクセシビリティの制約
10.3.5 アクセス修飾子
10.3.8.2 宣言されたアクセシビリティ
参照
概念
参照
アクセシビリティ レベルの使用に関する制限事項 (C# リファレンス)