实现IComparable 在泛型中:我如何访问Generic的值?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了实现IComparable 在泛型中:我如何访问Generic的值?相关的知识,希望对你有一定的参考价值。
我有一个泛型类如下(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))
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
变成一个结构。 (它需要是不可变的)
以上是关于实现IComparable 在泛型中:我如何访问Generic的值?的主要内容,如果未能解决你的问题,请参考以下文章