У меня есть общий класс следующим образом (Value
это Public
только для простоты, на самом деле все это инкапсулировано в свойствах):
Public MustInherit Class GenericInterval(Of T As {Structure, IComparable})
Public Value As T
End Class
Я хочу реализовать IComparable(Of T)
:
Public MustInherit Class GenericInterval(Of T As {Structure, IComparable})
Implements IComparable(Of T)
Public Value As T
Public Function CompareTo(Other As T) As Int32 Implements IComparable(Of T).CompareTo
Return Value.CompareTo(Other)
End Function
End Class
Но действительно ли это правильно? Это кажется несколько «несоответствующим», как если бы я сравнил значение с универсальным типом.
В тестовом модуле я создаю 2 переменные и присваиваю им значения.
Dim lTest1 As New GenericInterval()
Dim lTest2 As New GenericInterval()
lTest1.Value = 4
lTest2.Value = 5
Теперь я ожидаю сравнить lTest1
с lTest2
. Однако мне нужно выполнить тест на извлеченном Value
:
If lTest1.CompareTo(lTest2.Value) >= 0 Then
End If
Но при этом я мог бы просто использовать
If lTest1.Value >= lTest2.Value Then ...
полное отсутствие интерфейса.
Не было бы выгодно разрешить мне доступ к Value
уже в общем CompareTo
, например:
Return Value.CompareTo(Other.Value)
Однако Value
не является доступным членом универсального.
Я что-то здесь упускаю, или это недоступность по замыслу? Если да, то какова цель?
IComparable(Of GenericInterval(Of T))
? - person Damien_The_Unbeliever   schedule 16.04.2019