次の方法で共有


アクセシビリティ レベルの使用に関する制限事項 (C# リファレンス)

宣言で型を指定する場合は、型のアクセシビリティ レベルがメンバーまたは別の型のアクセシビリティ レベルに依存しているかどうかを確認します。 たとえば、ダイレクト 基底クラスは、少なくとも派生クラスと同じくらいアクセス可能である必要があります。 基底クラスの BaseClassMyClassよりもアクセスできないため、次の宣言によりコンパイラ エラーが発生します。

class BaseClass {...}
public class MyClass: BaseClass {...} // Error

C# 言語リファレンスには、C# 言語の最新リリース バージョンが記載されています。 また、今後の言語リリースのパブリック プレビューの機能に関する初期ドキュメントも含まれています。

このドキュメントでは、言語の最後の 3 つのバージョンまたは現在のパブリック プレビューで最初に導入された機能を特定します。

ヒント

C# で機能が初めて導入された時期を確認するには、 C# 言語バージョン履歴に関する記事を参照してください。

次の一覧は、宣言されたアクセシビリティ レベルの制限をまとめたものです。

  • クラス: クラス型の直接基底クラスは、少なくともクラス型自体と同じくらいアクセス可能である必要があります。
  • インターフェイス: インターフェイス型の明示的な基本インターフェイスは、少なくともインターフェイス型自体と同じくらいアクセス可能である必要があります。
  • デリゲート: デリゲート型の戻り値の型とパラメーター型は、少なくともデリゲート型自体と同じくらいアクセス可能である必要があります。
  • 定数: 定数の型は、少なくとも定数自体と同じくらいアクセス可能である必要があります。
  • フィールド: フィールドの型は、少なくともフィールド自体と同じくらいアクセス可能である必要があります。
  • メソッド: メソッドの戻り値の型とパラメーター型は、少なくともメソッド自体と同じくらいアクセス可能である必要があります。
  • プロパティ: プロパティの型は、少なくともプロパティ自体と同じくらいアクセス可能である必要があります。
  • イベント: イベントの種類は、少なくともイベント自体と同程度にアクセスできる必要があります。
  • インデクサー: インデクサーの型とパラメーターの型は、少なくともインデクサー自体と同じくらいアクセス可能である必要があります。
  • 演算子: 演算子の戻り値の型とパラメーター型は、少なくとも演算子自体と同じくらいアクセス可能である必要があります。
  • コンストラクター: コンストラクターのパラメーター型は、少なくともコンストラクター自体と同じくらいアクセス可能である必要があります。

次の例には、さまざまな型の誤った宣言が含まれています。 各宣言の後のコメントは、予想されるコンパイラ エラーを示しています。

// 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# の構文と使用法の決定的なソースです。

こちらも参照ください