0

我希望某个命名空间中的每个类都实现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 非泛型让子类处理正确的类型?

很高兴拥有:强制命名空间中的每个类通过协定实现接口。所以我不必记住;)

4

1 回答 1

1

一个接口不能实现另一个接口,但它可以从另一个接口继承。以下作品:

Public Interface IDao 
    Inherits IEquatable 

End Interface

所以你可以用这种方法应用你最初的想法

于 2013-05-15T15:59:05.877 回答