当存在模糊的虚方法时,为什么这个C#代码编译得很好?

时间:2010-05-27 10:20:10

标签: c# inheritance methods override

我有一个类(B类)继承了另一个包含虚方法的类(A类)。

错误地,我在B类中声明(应该是)重写方法时省略了override关键字。

A类

public class ClassA{
    public virtual void TestMethod(){
    }
}

B类

public class ClassB : ClassA{
    public void TestMethod(){
    }
}

编译没有问题的代码。任何人都可以解释原因吗?

3 个答案:

答案 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了解更多信息

相关问题