0

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

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

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

4

4 回答 4

3

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

于 2011-10-23T16:29:27.247 回答
2

知道何时使用覆盖和新关键字(C# 编程指南)

于 2011-10-23T16:27:03.070 回答
1

使用new的意思就是:不要覆盖。

唯一作用new是抑制编译器关于隐藏基成员的警告。它永远不会导致调用不同的方法。

于 2011-10-23T16:55:18.767 回答
0

它对多态性非常有用。

这篇文章可能是一个好的开始。
Hasan Khan 还发布了一篇我要提到的好文章(不再需要)。
这篇其他帖子也可能有帮助。

于 2011-10-23T16:30:54.220 回答