staticメソッド内からのprotectedの呼び出し

あまり使う機会がなかったので意識していなかった。
Aを継承したBのstaticメソッドからAのprotectedメソッドを呼びたい場合。

using System;

class A {
    protected void foo() {
        Console.WriteLine("foo");
    }
}

class B: A {
    public static void bar() {
        this.foo(); // < エラー!
    }
}

class Tester {
    public static void Main() {
        B.bar();
    }
}

そんなことできません。
staticなのでクラスのメンバでもなければインスタンスも存在していない。

それでも呼びたい!

アクセスしたい場合にはBを以下のようにする。
インスタンスを作ってあげればいいのかー。

class B: A {
    public static void bar() {
        B bi = new B();
        bi.foo();
    }
}

Bのインスタンスを作成し、継承したfooメソッドを呼ぶ。

Aのインスタンスじゃだめなの?

Aのインスタンスを作成しても、protectedなので参照できない。


OOPが理解できていないことを再認識。