宣言で型を指定する場合は、型のアクセシビリティ レベルがメンバーのアクセシビリティ レベルまたは別の型のアクセシビリティ レベルに依存しているかどうかを確認します。 たとえば、ダイレクト 基底クラスは、少なくとも派生クラスと同じくらいアクセス可能である必要があります。 基底クラスの BaseClass
は MyClass
よりもアクセスできないため、次の宣言によりコンパイラ エラーが発生します。
class BaseClass {...}
public class MyClass: BaseClass {...} // Error
次の表は、宣言されたアクセシビリティ レベルの制限をまとめたものです。
コンテキスト | 注釈 |
---|---|
クラス | クラス型の直接基底クラスは、少なくともクラス型自体と同じくらいアクセス可能である必要があります。 |
インターフェイス | インターフェイス型の明示的な基本インターフェイスは、少なくともインターフェイス型自体と同じくらいアクセス可能である必要があります。 |
代表者 | デリゲート型の戻り値の型とパラメーター型は、少なくともデリゲート型自体と同じくらいアクセス可能である必要があります。 |
定数 | 定数の型は、少なくとも定数自体と同じくらいアクセス可能である必要があります。 |
フィールド | フィールドの型は、少なくともフィールド自体と同じくらいアクセス可能である必要があります。 |
メソッド | メソッドの戻り値の型とパラメーター型は、少なくともメソッド自体と同じくらいアクセス可能である必要があります。 |
プロパティ | プロパティの型は、少なくともプロパティ自体と同じくらいアクセス可能である必要があります。 |
イベント | イベントの種類は、少なくともイベント自体と同じくらいアクセス可能である必要があります。 |
Indexers | インデクサーの型とパラメーターの型は、少なくともインデクサー自体と同じくらいアクセス可能である必要があります。 |
演算子 | 演算子の戻り値の型とパラメーター型は、少なくとも演算子自体と同じくらいアクセス可能である必要があります。 |
コンストラクター | コンストラクターのパラメーター型は、少なくともコンストラクター自体と同じくらいアクセス可能である必要があります。 |
例
次の例には、さまざまな型の誤った宣言が含まれています。 各宣言の後のコメントは、予想されるコンパイラ エラーを示しています。
// 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# の構文と使用法の決定的なソースです。
こちらも参照ください
GitHub で Microsoft と共同作業する
このコンテンツのソースは GitHub にあります。そこで、issue や pull request を作成および確認することもできます。 詳細については、共同作成者ガイドを参照してください。
.NET