在我的Windows Forms Control Library
项目中,是一个用户控件和一个由所述用户控件使用的类。
用户控件,就我的理解而言,与我的问题无关。只是为了完整起见:它继承自UserControl
,如Designer.vb
中所述:
<Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _
Partial Class UFB
Inherits System.Windows.Forms.UserControl
...
End Class
类是我有问题的部分。在其中,我想实现IEquatable
接口:
Public Class CPT
Implements IEquatable(Of CPT)
...
Public Function Equals(oOther As CPT) As Boolean _
Implements IEquatable(Of CPT).Equals
...
End Function
End Class
但是,VS 抱怨函数"等于"隐藏了基类"对象"中的可重写方法。若要重写基方法,必须将此方法声明为"重写"。
"好的",我说,"我们开始了":
Public Overrides Function Equals(oOther As CPT) As Boolean _
Implements IEquatable(Of CPT).Equals
...
End Function
但是现在VS抱怨说,函数"等于"不能声明为"覆盖",因为它不会覆盖基类中的函数。
那么,正确的方法是什么呢?
你应该使用 Overloads
关键字:
Public Class CPT
Implements IEquatable(Of CPT)
...
Public Overloads Function Equals(oOther As CPT) As Boolean _
Implements IEquatable(Of CPT).Equals
...
End Function
End Class
当两个重载都在同一类型中声明时,不需要该关键字,但是当您重载在基类型中声明的方法时,您需要显式。 现在,您有两种具有不同签名的Equals
方法,这就是您想要的。