アクセシビリティ レベルの使用に関する制限事項 (C# リファレンス)
宣言で型を指定する場合、その型のアクセシビリティ レベルがメンバーまたは他の型のアクセシビリティ レベルに依存するかどうかをチェックします。たとえば、直接基本クラスは、少なくともその派生クラスと同程度にアクセス可能である必要があります。次の宣言はコンパイラ エラーになりますが、それは基本クラス 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# 言語仕様」を参照してください。言語仕様は、C# の構文と使用法に関する信頼性のある情報源です。