VB.NET 中的多态性

发布于 2024-12-04 19:58:59 字数 353 浏览 0 评论 0原文

在 VB.NET 中,假设我有一个函数,

Public Function Foo(ByVal currentShape as Shape)

而不是传入 Shape 对象,而是传入一个名为 SquareShape 子类,如下所示:

Dim square As Square = new Square()
Foo(square)

在传入之前,我是否需要将 Square 对象转换为 Shape 对象?如果是这样,我该怎么做?

In VB.NET, say I have a function

Public Function Foo(ByVal currentShape as Shape)

Instead up passing in a Shape object, I pass in a subclass of Shape called Square like such:

Dim square As Square = new Square()
Foo(square)

Do I need to convert my Square object to a Shape object before passing it in? If so, how do I do this?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

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

发布评论

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

评论(3

鲸落 2024-12-11 19:58:59

正方形 是一个 形状
您不需要转换任何东西。

所有子类都可以隐式转换为其超类。

Square is-a Shape.
You don't need to convert anything.

All subclasses are implicitly convertible to their superclasses.

奶茶白久 2024-12-11 19:58:59

不,您不需要自己执行转换。 square 的值可以使用引用转换转换为 Shape 类型的值(它仍然是一个引用)。这不会创建一个新对象 - 它只是以不同的方式查看该对象:)Foo将只能访问声明的成员在 Shape 中,尽管它们可能在 Square被覆盖

当方法返回时,对 Foo 中的对象所做的任何更改仍然可以通过 square 看到。

No, you don't need to perform a conversion yourself. The value of square can be converted using a reference conversion to a value of type Shape (it's still a reference). This does not create a new object - it just looks at the object in a different way :) Foo will only be able to access members declared in Shape, although they may be overridden in Square.

Any changes made to the object within Foo will still be visible via square when the method returns.

闻呓 2024-12-11 19:58:59

我很确定你可以直接传递 Square 对象。

I'm pretty sure that you can pass the Square object straight in.

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