c#覆盖关键字

Nov*_*Net 2 c# virtual-functions

我想知道如果我没有override在派生类方法的方法之前放置关键字m1(),那么此前的默认值是什么,还是会抛出编译时错误?

class A { virtual void m1(){} }
class B: A { void m1(){} }
Run Code Online (Sandbox Code Playgroud)

jas*_*son 8

首先,您将收到编译时错误,因为virtual成员不能是私有的,这A.m1是写的.

其次,一旦你解决了这个问题,你就会得到一个B.m1隐藏继承成员的编译时警告A.m1.

第三,如果你这样做:

A a = new B();
a.m1();
Run Code Online (Sandbox Code Playgroud)

这将调用,A.m1而如果你插入override到定义中,B.m1那么上面将调用B.m1.但是,如果你插入new到定义中,B.m1那么上面仍然会调用A.m1但它会省略编译时警告.