class A
⇒class B
⇒⇒class C
こんな感じでクラスを継承している状態で
class Cからclass Aのメソッドを呼ぶことは可能でしょうか?
C++で書けばこんな感じです
/*virtual*/ void C::Func()
{
A::Func(); //★★★ ここ
}
…マニュアルを読みましょう。
// C#
public class Father {
public virtual void f() {
System.Console.WriteLine(Father.f);
}
}
public class Child : Father {
public override void f() {
base.f(); // ←ココ!
System.Console.WriteLine(Child.f);
}
}
public class Program {
public static void Main() {
Father fa = new Child();
fa.f();
}
}
επιστημηさん、ご回答ありがとうございます。
こちらの 質問が下手ですみません。
επιστημηさんの例で言えば
Childクラスをさらに派生させたChild2クラスを作って、
そこからChild::FではなくFather::FをCALLできるのでしょうか?
という質問でした。
こんな感じです。
public class Child2 : Child {
public override void f() {
base.f(); // ←★ココでChild::Fでは無く、Father::FをCALLしたい!!
System.Console.WriteLine(Child.f);
}
}
よろしくお願いします
あ、はいはい。親を飛び越して爺ちゃんのを呼びたい、と。
どーすんでしょねぇ...
直接、爺さんを呼び出せないのではないかな。
スパゲッティコードになりそうだし。
Childにf()が無ければ、Child2からFatherのf()をbase.f();で呼べるし。
個人的に必要性はまったく感じないけど。
そもそもFather.f()を隠蔽する目的で、
Child.f()が定義されているのだと思います。
だから、Child2からFather.f()を呼び出しては
いけないのだと思います。
どうしても呼び出したいのであれば、
Child2はChildでなく、Fatherを継承するのが手っ取り早いです。
あるいは、Child.f()を実装した人が、
Father.f()が隠されていることに
気付いていないのかもしれません。
いずれにせよクラスの設計が不味いと考えられます。
設計の見直しをする良いチャンスです。