マラス:
基底クラスがあるとしA
、派生クラスがB
。
クラスはA
2つの機能を持っているfun1()
とfun2()
、fun1()
電話をfun2()
。
クラスB
のオーバーライドfun1()
とfun2()
、再度fun1()
呼び出しfun2()
。
しかし、私は呼びたいと思いbase.fun1()
オーバーライドでfun2()
。以降base.fun1()
の呼び出しfun2()
の代わりに、非常に残念なループを作成し、基本クラスのバージョンの:
fun1() -> fun2() -> base.fun1() -> fun2() -> base.fun1() -> ...
強制的にどのような方法があるbase.fun1()
のベースバージョンを呼び出すためにはfun2()
?私は、本当の問題は、おそらくこれらのクラスの悪い設計であることを認識していますが、それは何とか可能だ場合、私はまだ興味があります。
jasonvuriker:
メソッドの隠蔽を使用してください。
メソッドの隠蔽は、シャドウイングとして知られています。親クラスのメソッドは、シャドウイングでは、overrideキーワードを使用せずに、子クラスに使用可能です。子クラスは、同じ機能の独自のバージョンを持っています。シャドウイングを実行するために新しいキーワードを使用します。
public class A
{
public virtual void Func1() { Func2(); }
public virtual void Func2() { Console.WriteLine("A: Func2"); }
}
public class B : A
{
public override void Func1() { Func2(); }
public new void Func2() { base.Func1(); }
}