206

これが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.
    }
}

抽象メソッドと仮想メソッドの違いに関して、上記のコードを誰かが説明できますか?

4

4 に答える 4

481

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

したがって、抽象メソッドには実際のコードが含まれておらず、サブクラスはメソッドをオーバーライドする必要があります。仮想メソッドにはコードを含めることができます。これは通常、何かのデフォルトの実装であり、サブクラスは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.
    }
}
于 2013-02-06T12:23:01.630 に答える