Я ищу возможность сравнивать и сортировать классы в моей модели. Все объекты в моей модели будут нуждаться в некоторой общей функциональности в отношении сравнений, поэтому я создал реферат 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
наследуется от BaseComparer
, который реализует IComparer
. Что мне здесь не хватает? Почему это не может быть брошено? Я подозреваю, что это как-то связано с IComparer(Of T)