【发布时间】:2012-01-04 03:15:50
【问题描述】:
我希望在我的模型中实现对类进行比较和排序的功能。我的模型中的所有对象都需要一些关于比较的通用功能,所以我创建了一个抽象的BaseComparer 来实现IComparer。
Public MustInherit Class BaseComparer(Of T)
Implements IComparer(Of T)
End Class
模型中的每个类都有自己的BaseComparer 的具体实现。
Public Class PersonComparer
Inherits BaseComparer(Of Person)
End Class
然后我有一个ComparerFactory 负责创建和初始化比较器:
Public Class ComparerFactory
Public Shared Function GetComparer(ByVal target As Type) As IComparer
If target Is GetType(Person) Then
Return New PersonComparer()
ElseIf target Is GetType(Organization) Then
Return New OrganizationComparer()
ElseIf 'etc...
End If
End Function
End Class
问题是ComparerFactory.GetComparer 抛出以下错误。有趣的是,代码编译得很好,但它只会在运行时出错。
无法将“PersonComparer”类型的对象转换为“System.Collections.IComparer”类型。
PersonComparer 继承自实现IComparer 的BaseComparer。我在这里想念什么?为什么不能投?我怀疑它与IComparer(Of T)有关
【问题讨论】:
标签: vb.net generics inheritance interface casting