vb.net和接口实现

时间:2013-05-15 15:51:25

标签: vb.net generics interface

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

很高兴:强制命名空间中的每个类按合同实现接口。所以我不必记住;)

1 个答案:

答案 0 :(得分:1)

接口无法实现其他接口,但可以从其他接口继承。 以下作品:

Public Interface IDao 
    Inherits IEquatable 

End Interface

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