コンパイラ エラー CS0122

'member' はアクセスできない保護レベルになっています

クラス メンバーのアクセス修飾子で、メンバーのアクセスが禁止されています。 詳細については、「アクセス修飾子」を参照してください。

拡張メソッドでは、それが拡張している型のプライベート メンバーにはアクセスできません。

(以下の例では示していませんが) この理由の 1 つは、フレンド アセンブリのターゲットで /out コンパイラ フラグを省略できることです。 詳細については、「フレンド アセンブリ」と「OutputAssembly (C# コンパイラ オプション)」を参照してください。

次の例では CS0122 が生成されます。

// CS0122.cs
public class MyClass
{
    private int data;

    void PrivateMethod() {}
    public void PublicMethod() {}
}

public static class MyClassExtensions
{
    public static int GetData(this MyClass myClass)
    {
        return myClass.data;   // CS0122
    }
}

public class Program
{
    public static void Main()
    {
        MyClass a = new MyClass();
        a.PrivateMethod();   // CS0122
        a.PublicMethod();   // OK
    }
}