C# · 12月 23, 2021

c# – 如果虚拟方法被声明为abstract

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

但在阅读one of the MSDN articles时,我看到了这个:


If a virtual method is declared abstract,it is still virtual to any
class inheriting from the abstract class. A class inheriting an
abstract method cannot access the original implementation of the
method—in the prevIoUs example,DoWork on class F cannot call DoWork
on class D. In this way,an abstract class can force derived classes
to provide new method implementations for virtual methods….

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

谢谢.

解决方法 当您查看引用段落正上方的代码示例时,它会变得更清晰: public class D{ public virtual void DoWork(int i) { // Original implementation. }}public abstract class E : D{ public abstract override void DoWork(int i);}

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

正确地说,抽象方法总是虚拟的.如果你的朋友仍然不相信,那么这是一个official quote:

An abstract method is implicitly a virtual method.