我的 friend 问我抽象 方法是否可以有virtual 修饰符。我说,不。 因为,抽象方法隐式也是虚方法,它不能有修饰符 virtual。
但在阅读时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
继承,并在那里声明为抽象方法。该方法仍然是虚拟的,只是变得抽象。
正如您所说的那样,抽象方法始终是虚拟的。如果您的 friend 仍然不服气,这里有一个 official quote为此:
An abstract method is implicitly a virtual method.
关于c# - 如果虚方法被声明为抽象的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25472654/