我应该使用什么?覆盖还是过载?

鲁迪

我只是读了一本关于OOP的书(JPHamilton编写的使用Visual Basic .NET进行面向对象的编程)。在他解释了重载但尚未覆盖的地方,他写道:“您只能在类中重载方法;这就是说,您可以添加与现有方法同名的新方法。但是,现有行为无法重新定义。 ”

但是据我了解,您可以使用重载从子类重新定义方法,例如:

Public Class clsTest
    Sub addition(ByVal x As Integer)
        MsgBox(x)
    End Sub
End Class

Public Class clsTest2 : Inherits clsTest
    Overloads Sub addition(ByVal x As Integer)
        MsgBox(x * x)
    End Sub
End Class

如果这是正确的,那么我想知道何时使用重载以及何时使用重写来重定义方法,因为

Public Class clsTest
    Overridable Sub addition(ByVal x As Integer)
        MsgBox(x)
    End Sub
End Class

Public Class clsTest2 : Inherits clsTest
    Overrides Sub addition(ByVal x As Integer)
        MsgBox(x * x)
    End Sub
End Class

给我相同的输出。

汉斯·帕桑特

第一个片段使我惊呼“嗯?” 我必须在VB.NET语言规范中进行查找。这确实是有效的,它在隐藏继承的名称的同时隐藏了阴影您通常会为此使用Shadows关键字,但是Overloads也是正确的,它会进行另一种隐藏。Shadows仅隐藏具有完全相同签名的继承成员,Overloads隐藏具有相同名称的所有内容,包括基类中具有相同名称的所有重载。

对于我来说,尚不清楚阴影是否是您真正想到的。这是非常危险的,它知道要调用错误的方法。根据对象引用类型,您将获得编译器认为要调用的方法古怪的情况是:

  Dim obj As ClsTest
  obj = new ClsTest2
  obj.addition(42)     '' Calls ClsTest.addition

这并不是经常要这样做的,您希望调用ClsTest2.addition(),因为该对象实际上是ClsTest2类型的。使用虚拟方法时可以避免的问题,就像在第二个片段中一样。然后,无论对象引用类型如何,都将获得ClsTest2.addition()。如果您不确定想要什么,请选择此菜单。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

我应该遮挡还是覆盖?

来自分类Dev

我应该使用Closing事件还是覆盖OnClosing?

来自分类Dev

我应该使用HSV / HSB还是RGB,为什么?

来自分类Dev

我应该使用createRef还是useRef?为什么?

来自分类Dev

我应该使用JSON数组还是对象?

来自分类Dev

我应该使用属性“ __setattr__”还是...?

来自分类Dev

春天-我应该使用@Bean还是@Component?

来自分类Dev

我应该使用10.04还是12.04?

来自分类Dev

我应该使用²还是<sup> 2 </ sup>

来自分类Dev

我应该使用KVO还是NSNotificationCenter?

来自分类Dev

我应该使用字段还是属性?

来自分类Dev

我应该使用charAt还是toCharArray?

来自分类Dev

流星:我应该使用摊牌还是减价?

来自分类Dev

我应该使用Dockerfiles还是映像提交?

来自分类Dev

我应该对<textarea>使用.innerHTML还是.value?

来自分类Dev

我应该使用KeyGenerator还是SecretKeyFactory?

来自分类Dev

我应该使用AcceptEx()还是WSAAccept()?

来自分类Dev

我应该使用Cursor还是CursorLoader?

来自分类Dev

我应该使用“设置”还是“列表”

来自分类Dev

for ... of循环。我应该使用const还是let?

来自分类Dev

我应该使用if语句还是循环?

来自分类Dev

我应该使用UML跟踪还是实现

来自分类Dev

我应该安装zip还是使用gzip?

来自分类Dev

CSS:我应该使用mixin还是类?

来自分类Dev

我应该使用useradd还是adduser?

来自分类Dev

我应该使用requestanimationframe还是setTimeout?

来自分类Dev

我应该使用SQL还是JSON

来自分类Dev

我应该使用UUID还是其他?

来自分类Dev

我应该使用 xz 还是 lzma 压缩?