我希望某个命名空间中的每个类都实现IEquatable(Of thatClass)
及其对应的GetHashCode
.
Namespace DAO
Public Class Product : Implements IEquatable(Of Product)
Shadows Function Equals(ByVal other As Product) As Boolean Implements IEquatable(Of Product).Equals
Shadows Function GetHashCode() As Integer
End Class
End Namespace
我可以“记住”实现这两种方法,但那将是不好的做法。
我可以编写一个接口 IDao 并再次“记住”让所有类都实现该接口。但是一个接口不能实现另一个接口。
Public Interface IDao : Implements IEquatable ' <---- NO!
好的,所以我可以创建一个抽象类(糟糕,Dao 类将无法从其他类继承)并再次记住让所有类都继承自它:
Public MustInherit Class DaoBase : Implements IEquatable(Of DaoBase)
MustOverride Shadows Function Equals(ByVal other As DaoBase) As Boolean Implements IEquatable(Of DaoBase).Equals
MustOverride Shadows Function GetHashCode() As Integer
End Class
Public Class Product
Inherits DaoBase
Overrides Function Equals(ByVal other As DaoBase) As Boolean
Return ???
End Function
现在 Equals 中的参数是 DaoBase,而不是 Product。我可以投,但是...
或者我可以将 DaoBase 概括为:
Public MustInherit Class DaoBase(Of T) : Implements IEquatable(Of T)
MustOverride Shadows Function Equals(ByVal other As T) As Boolean Implements IEquatable(Of T).Equals
MustOverride Shadows Function GetHashCode() As Integer
End Class
但这意味着将为每个继承类创建不同的 DaoBase。
有没有办法声明 DaoBase 非泛型并让子类处理正确的类型?
很高兴拥有:强制命名空间中的每个类通过协定实现接口。所以我不必记住;)