在泛型中实现 IComparable<T>:如何访问泛型的值?
Implementing IComparable<T> in Generics: how can I access the Generic's Value?
我有一个通用的class如下(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
但这真的正确吗?感觉有点 "unmatching",好像我会将一个值与泛型进行比较。
在一个测试模块中,我实例化了 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))
Public Class GenericInterval(Of T As {Structure, IComparable})
Implements IComparable(Of GenericInterval(Of T))
Public Sub New(value As T)
Me.Value = value
End Sub
Public Readonly Value As T
Public Function CompareTo(other As GenericInterval(Of T)) As Integer Implements IComparable(Of GenericInterval(Of T)).CompareTo
Return Value.CompareTo(other.Value)
End Function
End Class
测试:
Sub Main
Dim lTest1 As New GenericInterval(Of Integer)(4)
Dim lTest2 As New GenericInterval(Of Integer)(5)
Console.WriteLine(lTest2.CompareTo(lTest1))
End Sub
如果 T
是 Structure
而 Value
只是 属性,您可能还想将 GenericInterval
变成一个结构。 (它需要是不可变的)
我有一个通用的class如下(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
但这真的正确吗?感觉有点 "unmatching",好像我会将一个值与泛型进行比较。
在一个测试模块中,我实例化了 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))
Public Class GenericInterval(Of T As {Structure, IComparable})
Implements IComparable(Of GenericInterval(Of T))
Public Sub New(value As T)
Me.Value = value
End Sub
Public Readonly Value As T
Public Function CompareTo(other As GenericInterval(Of T)) As Integer Implements IComparable(Of GenericInterval(Of T)).CompareTo
Return Value.CompareTo(other.Value)
End Function
End Class
测试:
Sub Main
Dim lTest1 As New GenericInterval(Of Integer)(4)
Dim lTest2 As New GenericInterval(Of Integer)(5)
Console.WriteLine(lTest2.CompareTo(lTest1))
End Sub
如果 T
是 Structure
而 Value
只是 属性,您可能还想将 GenericInterval
变成一个结构。 (它需要是不可变的)