3

抽象クラスAを持ち、部分実装で仮想メソッドを持ち、それをクラスBで継承しています。派生クラスで仮想メソッドを実装したいのですが、派生クラスで基本実装をどのように取得すればよいですか。 例えば。

public abstract class A
{
    public int Sum { set; get; }
    public virtual void add(int a, int b)
    {
        Sum = a + b;
    }
}
class B : A
{
    public override void add(int a, int b)
    {
        // what should i write here
    }
}


  • @Derlin重複リンクにC ++スレッドを使用するのは公平ではないと思います(このトピックの基本的な考え方)。 - Jeppe Stig Nielsen
  • おっと、すみません、私は誤読しました。 C#ではなくC ++だと思いました。 - Derlin
  • この質問は、C#のコンテキストでも以前に行われたことがあると確信しています。 - Sentry

3 답변


7

仮想メソッドをオーバーライドしても、それが実行されるだけで、デフォルトの(ベース)実装がオーバーライドされ、新しい実装に置き換えられます。ただし、仮想メソッドにオーバーライドされた実装を提供しない場合は、自動的に基本実装が取得されます。だから、あなたの質問に対する答えは単純です上書きしないでくださいaddそもそも方法

class B : A {}

ただし、基本実装を保持する必要があるがそれを拡張したい場合は、派生クラスから基本実装を明示的に呼び出すことができます。baseキーワード。例えば:

class B : A
{
    public override void add(int a, int b)
    {
        base.add(a, b);
        DoSomethingElse();
    }
}


  • これは正しい答えです。 - MrVoid

3

public abstract class A
{
    public int Sum { set; get; }
    public virtual void add(int a, int b)
    {
        Sum = a + b;
    }
}

class B : A
{
    public override void add(int a, int b)
    {
        //do your sufff

        //call base method of class A
        base.add(a, b);
    }
}


3

基本クラス関数を呼び出すだけです。

class B : A
{
    public override void add(int a, int b)
    {
        // do operation related to derived class 
        // call your base function
        base.add(a, b);
    }
}

リンクされた質問


関連する質問

最近の質問