C#では、仮想メソッドの抽象化をマークして、継承されたクラスに実装を強制することができます。
class A
{
public virtual void Method()
{
Console.WriteLine("A method call");
}
}
abstract class B : A
{
// Class inherited from B are forced to implement Method.
public abstract override void Method();
}
から継承されたクラスからのA
実装を呼び出したいと思います。Method
B
class C : B
{
public override void Method()
{
// I would like to call A implementation of Method like this:
// base.base.Method();
}
}
これを行うための最善の方法は、保護されたメソッド「MethodCore」を実装に追加し、必要に応じて呼び出すことです。
class A
{
public virtual void Method()
{
MethodCore();
}
protected void MethodCore()
{
Console.WriteLine("A method call");
}
}
abstract class B : A
{
public abstract override void Method();
}
class C : B
{
public override void Method()
{
MethodCore();
}
}
これを行う他の方法はありますか?
これを行うための最善の方法は、保護されたメソッド「MethodCore」を実装に追加し、必要に応じて呼び出すことです。
はい。あなたが呼び出すことができませんので、abstract
使用方法をbase
、すべての可能な解決策は最終的に呼び出すためにあなたを必要としているMethod
中でA
使用してA
インスタンスを。
それはあなたが提供する方法を探しているように見える、とデフォルトの実装をMethod
してB
、任意のサブクラスようなB
方法は、単純に実装存在を使用する必要があります実装されていませんA
。よりよい解決策をマークしないことであろうMethod
とabstract
の中でB
。代わりに、使用するMethod
際にB
リダイレクトMethod
しA
てくださいbase.Method()
abstract class B : A {
// Class inherited from B are forced to implement Method.
public virtual void Method() {
base.Method()//calls Method in A
}
}
このように、任意のサブクラスB
それは、呼び出したいMethod
からA
単に言うことができますbase.Method()
。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加