我想知道如果我不在派生类方法m1()
中的方法之前放置override
关键字,那么这之前的默认值是多少,还是会抛出编译时错误?
class A { virtual void m1(){} }
class B: A { void m1(){} }
最佳答案
首先,你会得到一个编译时错误,因为 virtual
成员不能是私有(private)的,A.m1
是这样写的。
其次,修复此问题后,您将收到一个编译时警告,提示 B.m1
隐藏了继承的成员 A.m1
。
第三,如果你这样做:
A a = new B();
a.m1();
这将调用 A.m1
而如果您将 override
插入到 B.m1
的定义中,则上面的代码将调用 B.m1
。然而,如果你将 new
插入到 B.m1
的定义中,那么上面的代码仍然会调用 A.m1
但它会省略编译 -时间预警。
关于C#覆盖关键字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4045739/