这是来自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. } }
任何人都可以就抽象方法和虚拟方法之间的区别解释上述代码吗?
虚拟方法有一个实现,并为派生类提供覆盖它的选项。抽象方法不提供实现并强制派生类覆盖该方法。
因此,抽象方法中没有实际代码,子类必须覆盖该方法。虚拟方法可以有代码,这通常是某些东西的默认实现,并且任何子类都可以使用override修饰符覆盖该方法并提供自定义实现。
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. } }