方法可以是抽象的但不是虚拟的吗?

sna*_*ile 2 c#

据我了解,标记为抽象的方法是隐式虚拟的.原因:假设给定对象的编译时类型是抽象的.如果正在调用对象的一个​​抽象方法,则要执行的实际方法是在对象的运行时类型中定义的方法.不是吗?如果我是对的,那么抽象方法的行为就好像它也是虚拟的.

尽管如此,我已经成功地同时标记了一个抽象和虚拟的C#方法:

public abstract virtual void crazy();
Run Code Online (Sandbox Code Playgroud)

我认为这意味着抽象方法不一定是虚拟的,而抽象方法实际上与虚拟方法正交.

我有什么问题?抽象方法怎么不是虚拟的?

Dan*_*rth 7

您不能将方法标记为abstractvirtual.这将导致编译器错误:

抽象方法'Namespace.Class.Foo()'不能标记为虚拟

你的其余问题是正确的:abstract方法是隐含的virtual.