アクセシビリティ レベルの使用に関する制限事項 (C# リファレンス)
更新 : 2007 年 11 月
型を宣言する場合は、宣言する型が、少なくとも他のメンバまたは型と同程度にアクセス可能であるようにする必要があるかどうかを確認してください。たとえば、直接基本クラスは、少なくともその派生クラスと同程度にアクセス可能である必要があります。次の宣言はコンパイラ エラーになりますが、それは BaseClass クラスのアクセシビリティが MyClass のアクセシビリティよりも低いためです。
class BaseClass {...}
public class MyClass: BaseClass {...} // Error
宣言されたアクセシビリティ レベルを使用する時の制限を次の表にまとめて示します。
コンテキスト |
解説 |
---|---|
クラスの型の直接基本クラスは、少なくとも、クラスの型自体と同程度にアクセス可能である必要があります。 |
|
インターフェイスの型の明示的な基本インターフェイスは、少なくとも、インターフェイスの型自体と同程度にアクセス可能である必要があります。 |
|
デリゲート型の戻り値の型およびパラメータの型は、少なくとも、デリゲート型自体と同程度にアクセス可能である必要があります。 |
|
定数の型は、少なくとも定数自体と同程度にアクセス可能である必要があります。 |
|
フィールドの型は、少なくともフィールド自体と同程度にアクセス可能である必要があります。 |
|
メソッドの戻り値の型およびパラメータの型は、少なくとも、メソッド自体と同程度にアクセス可能である必要があります。 |
|
プロパティの型は、少なくともプロパティ自体と同程度にアクセス可能である必要があります。 |
|
イベントの型は、少なくともイベント自体と同程度にアクセス可能である必要があります。 |
|
インデクサの型およびパラメータの型は、少なくとも、インデクサ自体と同程度にアクセス可能である必要があります。 |
|
演算子の戻り値の型およびパラメータの型は、少なくとも、演算子自体と同程度にアクセス可能である必要があります。 |
|
コンストラクタのパラメータの型は、少なくともコンストラクタ自体と同程度にアクセス可能である必要があります。 |
使用例
各種の型の不適切な宣言の例を次に示します。各宣言へのコメントに、予期されるコンパイラ エラーを示します。
// Restrictions on Using Accessibility Levels
// CS0052 expected as well as CS0053, CS0056, and CS0057
// To make the program work, change access level of both class B
// and MyPrivateMethod() to public.
using System;
// A delegate:
delegate int MyDelegate();
class B
{
// A private method:
static int MyPrivateMethod()
{
return 0;
}
}
public class A
{
// Error: The type B is less accessible than the field A.myField.
public B myField = new B();
// Error: The type B is less accessible
// than the constant A.myConst.
public readonly B myConst = new B();
public B MyMethod()
{
// Error: The type B is less accessible
// than the method A.MyMethod.
return new B();
}
// Error: The type B is less accessible than the property A.MyProp
public B MyProp
{
set
{
}
}
MyDelegate d = new MyDelegate(B.MyPrivateMethod);
// Even when B is declared public, you still get the error:
// "The parameter B.MyPrivateMethod is not accessible due to
// protection level."
public static B operator +(A m1, B m2)
{
// Error: The type B is less accessible
// than the operator A.operator +(A,B)
return new B();
}
static void Main()
{
Console.Write("Compiled successfully");
}
}
C# 言語仕様
詳細については、「C# 言語仕様」の次のセクションを参照してください。
3.5.1 宣言されたアクセシビリティ
3.5.4 アクセシビリティの制約
10.3.5 アクセス修飾子
10.3.8.2 宣言されたアクセシビリティ
10.3.8.5 包含する型の private メンバおよび protected メンバへのアクセス