实现一个适用于不同类的比较器函数

时间:2014-02-16 15:31:07

标签: c# .net vb.net design-patterns

有没有办法实现一个可以被几个不同类使用的比较器函数,如果不是那么具有相同成员名的不同类呢?是否有设计模式?

确定, 我有几个类,我有一个同名和类型的成员 我可以为每个类实现(VB)Icomparer或IComparable,即A类:实现IComparable并为每个类实现CompareTo函数(我有很多类) 有没有办法实现一个函数来完成工作,在每个类中我都可以使用这个函数,或者我需要为每个类实现CompareTo函数 谢谢

Private Class A : Implements IComparable       
    Public A1 As String
    Public A2 As Integer
    Public Age As String

    Function CompareTo(ByVal obj As Object) As Integer Implements IComparable.CompareTo
        Dim a As A = CType(obj, A)
        Return String.Compare(CStr(Me.Age), CStr(a.Age))
    End Function
End Class

Private Class B : Implements IComparable
    Public B1 As String
    Public B2 As Date
    Public Age As String

    Function CompareTo(ByVal obj As Object) As Integer Implements IComparable.CompareTo
        Dim b As B = CType(obj, B)
        Return String.Compare(CStr(Me.Age), CStr(b.Age))
    End Function
End Class

2 个答案:

答案 0 :(得分:1)

此代码背后的业务需求是什么?如果你详细说明,我们可能会建议一个更好的解决方案。过于抽象并不总是适合这种情况。

但是,您可以创建一个公开Age As String的接口,然后实现一个抽象类(VB中的MustInherit),它将为此接口提供一个实现,然后从抽象类继承您的类。

答案 1 :(得分:1)

基于对问题的一些稀疏描述,我相信你想要实现的是一种通用的比较方法。实施特定于您的要求。但是,根据您的简短描述,您需要使用reflection循环遍历TFrom的属性,并查看TTo是否具有等效项。

对于您的实施,您必须回答一个简单的问题,“您是否正在进行此比较以确定排序顺序?”如果是这样,那么实现{@ 3}}接口就像@Sergey Berezovskiy所提到的那样。否则,IComparable<T>是更好的选择。