C# 中的阴影
我正在使用 C#。我有两个类 A 和 B。B 继承自 A。它们都有一个 Foo() 方法(在 A 中是虚拟的)。现在,如果我有
A b = new B();
int x = b.Foo();
,那么 A 中的 Foo() 就会被调用。但是,如果 B 中的 Foo() 具有“new”关键字,则将再次调用基类中的 Foo()。那么,为什么我要使用阴影呢?
I'm using C#. I have two classes A and B. B inherits from A. They both have a Foo() method (which is virtual in A). Now, if I have
A b = new B();
int x = b.Foo();
then Foo() from A is called. But if Foo() in B has the 'new' keyword, then again the Foo() from the base class is called. Then, why would I use shadowing?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
我使用方法隐藏的唯一情况是当我想在派生类中返回派生类型时(从这两种方法返回的实际对象应该是相同的)。当然,这只是针对 C# 缺乏结果类型协方差的一种破解。
The only case where I used method hiding is when I want to return a derived type in the derived class (the actual object being returned from both methods should be identical here). Of course this is only a hack around C#s lack of result type covariance.
了解何时使用 Override 和 New 关键字(C# 编程指南)
Knowing When to Use Override and New Keywords (C# Programming Guide)
使用
new
的确切含义是:不要覆盖。new 的唯一作用是抑制有关隐藏基成员的编译器警告。它永远不会导致调用不同的方法。
Using
new
means exactly that: don't override.The only effect of
new
is to suppress the compiler warning about hiding a base-member. It will never cause a different method to be called.它对于多态性非常有用。
这篇文章可能是一个好的开始。
哈桑·汗 (Hasan Khan) 还发布了一篇我要提到的好文章(不再需要了)。
这篇文章 也可能有帮助。
It's quite useful with polymorphism.
This post might be a good start.
Hasan Khan also posted a good one that I was going to mention (no need anymore).
This other post might be of help too.