如果虚拟方法被声明为abstract

Far*_*yev 6 c# oop polymorphism inheritance

我的朋友问我抽象方法是否可以有虚拟修饰符.我说,.因为抽象方法也隐式也是虚方法,所以它不能具有虚拟修饰符.

但在阅读其中一篇MSDN文章时,我看到了这一点:

...如果虚拟方法被声明为abstract,则它仍然是从抽象类继承的任何类的虚拟方法.继承抽象方法的类无法访问方法的原始实现 - 在前面的示例中,类F上的DoWork无法在类D上调用DoWork.这样,抽象类可以强制派生类为虚方法提供新方法实现....

我无法正确理解第一句话.你能不能解释一下他们想说什么?

谢谢.

Hei*_*nzi 7

当您查看引用段落正上方的代码示例时,它会变得更清晰:

public class D
{
    public virtual void DoWork(int i)
    {
        // Original implementation.
    }
}

public abstract class E : D
{
    public abstract override void DoWork(int i);
}
Run Code Online (Sandbox Code Playgroud)

虚方法D.DoWork继承E,并且声明为abstract.该方法仍然虚拟的,它也刚刚变得抽象.

正确地说,抽象方法总是虚拟的.如果你的朋友仍然不相信,这里有一个官方报价:

抽象方法隐含地是虚方法.

  • **这个方法仍然是虚拟的,它也刚刚变得抽象.**这句话足以让我理解.非常感谢. (2认同)