据我了解,标记为抽象的方法是隐式虚拟的.原因:假设给定对象的编译时类型是抽象的.如果正在调用对象的一个抽象方法,则要执行的实际方法是在对象的运行时类型中定义的方法.不是吗?如果我是对的,那么抽象方法的行为就好像它也是虚拟的.
尽管如此,我已经成功地同时标记了一个抽象和虚拟的C#方法:
public abstract virtual void crazy();
Run Code Online (Sandbox Code Playgroud)
我认为这意味着抽象方法不一定是虚拟的,而抽象方法实际上与虚拟方法正交.
我有什么问题?抽象方法怎么不是虚拟的?
您不能将方法标记为abstract
和virtual
.这将导致编译器错误:
抽象方法'Namespace.Class.Foo()'不能标记为虚拟
你的其余问题是正确的:abstract
方法是隐含的virtual
.