Nov*_*Net 2 c# virtual-functions
我想知道如果我没有override在派生类方法的方法之前放置关键字m1(),那么此前的默认值是什么,还是会抛出编译时错误?
class A { virtual void m1(){} }
class B: A { void m1(){} }
Run Code Online (Sandbox Code Playgroud)
首先,您将收到编译时错误,因为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但它会省略编译时警告.