C# 中的阴影

发布于 2024-12-11 21:02:16 字数 217 浏览 0 评论 0原文

我正在使用 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

温柔少女心 2024-12-18 21:02:16

我使用方法隐藏的唯一情况是当我想在派生类中返回派生类型时(从这两种方法返回的实际对象应该是相同的)。当然,这只是针对 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.

北凤男飞 2024-12-18 21:02:16

使用 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.

甜宝宝 2024-12-18 21:02:16

它对于多态性非常有用。

这篇文章可能是一个好的开始。
哈桑·汗 (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.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文