开发者

Why does this C# code compile fine when there is an ambiguous virtual method?

I have a class (Class B) 开发者_如何学Cthat inherits another class (Class A) that contains virtual methods.

Mistakenly, I omitted the override keyword when declaring a (supposed to be) overriding method in Class B.

Class A

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

Class B

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

The code compiled without a problem. Can anyone explain why?


It's not ambiguous. It should compile with a warning to say that you should either specify "new" or "override" and that the default is effectively "new".

It definitely gives a warning when I try to compile that code - when you say it compiles "fine" and "without a problem" are you ignoring warnings?


The C# compiler generates a warning. I advice you to always compile with 'warnings as errors'.


class B should be

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

but it can compile without the override - it should generate a warning that if it was intended you need to add the new keyword

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

checkout this for more information

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜