我可以在vb.net中覆盖和重载相同的功能吗?

时间:2013-06-22 20:24:47

标签: vb.net

是否可以在vb.net中同时覆盖和重载相同的功能? 像这样:

Public Overrides overloads Function Delete(ByVal code As Integer) As Boolean

3 个答案:

答案 0 :(得分:2)

如果您的类包含多个具有相同名称和不同签名的方法,则可以使用overloads关键字。如果有用,请参阅以下代码并标记答案

Public Class Base

   Public Overridable Function Delete(code As Integer) As Boolean
     Return True
   End Function

End Class

Public Class Derived
Inherits Base

Public Overloads Overrides Function Delete(code As Integer) As Boolean
    Return MyBase.Delete(code)
End Function
Public Overloads Function Delete(code As Integer, id As Integer) As Boolean
    Return MyBase.Delete(code)
End Function

End Class

答案 1 :(得分:0)

不,你不能这样做,因为一旦你改变了方法的签名(这是你想要这样做的唯一原因),Overrides将无法找到你想要覆盖的底层方法。

但是,您可以让覆盖或重载调用相应的内部方法,或者如果不使用被覆盖的版本则抛出异常。

Public Overrides Function Delete(ByVal code As Integer) As Boolean
    Throw New Exception("Please use the two parameter version")
End Function

Public Overloads Function Delete(ByVal code As Integer, param2 As Boolean) As Boolean
    MessageBox.Show("This is the right one")
    Return True
End Function

答案 2 :(得分:0)

以这种方式思考它可能会有所帮助。你要求该功能做两件事。

使用不同的参数集,重载调用基本上是相同的函数。

覆盖使用相同的参数调用相同的函数来执行不同的操作。