小编典典

虚拟方法和抽象方法之间的区别

all

这是来自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.
    }
}

任何人都可以就抽象方法和虚拟方法之间的区别解释上述代码吗?


阅读 68

收藏
2022-06-18

共1个答案

小编典典

虚拟方法有一个实现,并为派生类提供覆盖它的选项。抽象方法不提供实现并强制派生类覆盖该方法。

因此,抽象方法中没有实际代码,子类必须覆盖该方法。虚拟方法可以有代码,这通常是某些东西的默认实现,并且任何子类都可以使用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.
    }
}
2022-06-18