C#中的阴影

时间:2011-10-23 16:25:29

标签: c# inheritance shadowing

我正在使用C#。我有两个A和B类.B继承自A.它们都有一个Foo()方法(在A中是虚拟的)。现在,如果我有

A b = new B();
int x = b.Foo();

然后调用来自A的Foo()。但是如果B中的Foo()具有'new'关键字,则再次调用基类中的Foo()。那么,为什么我会使用阴影?

4 个答案:

答案 0 :(得分:3)

我使用方法隐藏的唯一情况是当我想在派生类中返回派生类型时(从这两个方法返回的实际对象在这里应该是相同的)。当然,这只是围绕C#缺乏结果类型协方差的黑客攻击。

答案 1 :(得分:2)

答案 2 :(得分:1)

使用new意味着:不要覆盖。

new效果是禁止编译器隐藏基本成员的警告。它永远不会导致调用不同的方法。

答案 3 :(得分:0)

它对多态性非常有用
This post可能是一个好的开始 Hasan Khan还发了一篇我要提及的好文章(不再需要了) This other post也可能有所帮助。