我有一个类(B类)继承了另一个包含虚方法的类(A类)。
错误地,我在B类中声明(应该是)重写方法时省略了override
关键字。
A类
public class ClassA{
public virtual void TestMethod(){
}
}
B类
public class ClassB : ClassA{
public void TestMethod(){
}
}
编译没有问题的代码。任何人都可以解释原因吗?
答案 0 :(得分:7)
这不是模棱两可的。它应该编译并发出警告,说你应该指定“new”或“override”,并且默认值实际上是“new”。
当我尝试编译代码时,它肯定会发出警告 - 当你说它编译“罚款”而“没有问题”时你忽略了警告吗?
答案 1 :(得分:1)
C#编译器生成警告。我建议你总是用“警告错误”编译。
答案 2 :(得分:0)
B类应该是
public class ClassB : ClassA{
public override void TestMethod(){
}
}
但是它可以在没有覆盖的情况下进行编译 - 它应该生成一个警告,如果它打算你需要添加新的关键字
public class ClassB : ClassA{
public new void TestMethod(){
}
}
结帐this了解更多信息