我的朋友问我抽象方法是否可以有虚拟修饰符.我说,不.
因为抽象方法也隐式也是虚方法,所以它不能具有虚拟修饰符.
因为抽象方法也隐式也是虚方法,所以它不能具有虚拟修饰符.
但在阅读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.