Are abstract methods virtual?
声明方法
也就是说,在子类中,我可以多次重写它,并且在运行时,将调用与对象的运行时类型相对应的方法?
是否可以声明抽象的非虚拟方法?也就是说,必须在非抽象子类中实现的方法不能被重写?
是的,抽象方法根据定义是虚拟的;为了实际被子类重写,它们必须是可重写的:
When an instance method declaration includes an
abstract modifier, that method is said to be an abstract method. Although an abstract method is implicitly also a virtual method, it cannot have the modifiervirtual .
相反,您不能声明一个抽象的非虚拟方法,因为如果可以的话,您将拥有一个无法实现的方法,因此永远无法调用它,这使得它相当无用。
但是,如果您希望让一个类实现一个抽象方法,但不允许它的任何子类修改它的实现,那么
1 2 3 4 5 6 7 8 9 10 11 12 | abstract public class AbstractClass { abstract public void DoSomething(); } public class BaseClass : AbstractClass { public sealed override void DoSomething() { Console.WriteLine("Did something"); } } |
注意,虽然抽象方法是(隐式)虚拟的,但具体基类中的实现是非虚拟的(因为
是的,它们是虚拟的。否则,您将无法为它们编写实现。