アクセシビリティ レベルの使用に関する制限事項 (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 メンバへのアクセス

参照

概念

C# プログラミング ガイド

参照

C# のキーワード

アクセス修飾子 (C# リファレンス)

アクセシビリティ ドメイン (C# リファレンス)

アクセシビリティ レベル (C# リファレンス)

アクセス修飾子 (C# プログラミング ガイド)

public (C# リファレンス)

private (C# リファレンス)

protected (C# リファレンス)

internal (C# リファレンス)

その他の技術情報

C# リファレンス