1. ホーム
  2. c#

[解決済み】仮想メソッドと抽象メソッドの違い【重複あり

2022-04-12 06:04:17

質問

以下は、以下のコードです。 MSDN :

// compile with: /target:library 
public class D
{
    public virtual void DoWork(int i)
    {
        // Original implementation.
    }
}

public abstract class E : D
{
    public abstract override void DoWork(int i);
}

public class F : E
{
    public override void DoWork(int i)
    {
        // New implementation.
    }
}

抽象メソッドと仮想メソッドの違いに関して、上記のコードを説明できる方はいらっしゃいますか?

どのように解決するのですか?

仮想メソッドには実装があり、派生クラスにはそれをオーバーライドするオプションが提供されます。抽象的なメソッドは実装を提供せず、派生クラスがメソッドをオーバーライドするように強制します。

つまり、抽象メソッドには実際のコードがなく、サブクラスはメソッドをオーバーライドしなければならないのです。仮想メソッドはコードを持つことができ、それは通常何かのデフォルトの実装で、任意のサブクラスは override 修飾子を使用して、独自の実装を提供します。

public abstract class E
{
    public abstract void AbstractMethod(int i);

    public virtual void VirtualMethod(int i)
    {
        // Default implementation which can be overridden by subclasses.
    }
}

public class D : E
{
    public override void AbstractMethod(int i)
    {
        // You HAVE to override this method
    }
    public override void VirtualMethod(int i)
    {
        // You are allowed to override this method.
    }
}