【发布时间】:2019-04-16 05:41:47
【问题描述】:
我有一个泛型类如下(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 ...
完全省略接口。
允许我在通用CompareTo 中访问Value 不是很有利吗,例如:
Return Value.CompareTo(Other.Value)
但是,Value 不是泛型中的可访问成员。
我在这里遗漏了什么,或者这是设计使然的不可访问性?如果有,目的是什么?
【问题讨论】:
-
你不想成为
IComparable(Of GenericInterval(Of T))吗? -
接受马格努斯的回答。
标签: .net generics icomparable