据我了解,标记为抽象的方法是隐式虚拟的。原因:假设给定对象的编译时类型是抽象的。如果正在调用对象的一个抽象方法,则要执行的实际方法是在对象的运行时类型中定义的方法。不是吗?如果我是对的,那么抽象方法的行为就好像它也是虚拟的。
尽管如此,我还是成功地同时标记了一个抽象和虚拟的C#方法:
public abstract virtual void crazy();
我认为这意味着抽象方法不一定是虚拟的,抽象方法实际上与虚拟方法正交。
我出错了什么?抽象方法怎么不是虚拟的?
答案 0 :(得分:7)
您无法将方法标记为abstract
和virtual
。这将导致编译器错误:
抽象方法'Namespace.Class.Foo()'不能标记为虚拟
问题的其余部分是正确的:abstract
方法隐含virtual
。
答案 1 :(得分:3)
来自MSDN
答案 2 :(得分:2)
“您不能将virtual修饰符与static,abstract,private或override修饰符一起使用。”