IComparable 接口
https://docs.microsoft.com/zh-cn/dotnet/api/system.icomparable?view=netcore-3.1
定义由值类型或类实现的特定于类型的通用比较方法,旨在对其实例进行排序。
在System.Array类中有一个共享的Sort方法,该方法可以对简单数据类型的数组进行排序。但是,Sort方法不能直接对更加复杂的对象进行排序,因为该方法不知道复杂对象之间如何进行比较。
实现IComparable接口可以使对象能够通过Array.Sort方法进行排序。IComparable接口仅包含一个方法CompareTo(),该方法的语法形式如下:
Function CompareTo ( obj As Object ) As Integer
其中,参数obj的类型为System.Objcct,表示与当前实例对象进行比较的对象。返回值为一个32位的有符号整数,指示要比较的对象的相对顺序,返回值的含义如下:
- 如果返回值小于零,表示当前对象小于被比较的对象obj。
- 如果返回值等于零,表示当前对象与被比较的对象obj相等。
- 如果返回值大于零,表示当前对象大于被比较的对象obj。
Module Module1
Public Class Customer
Implements IComparable
Private strName As String
Public Sub New(ByVal name As String)
Me.strName = name
End Sub
Public Function CompareTo(ByVal obj As Object) As Integer Implements System.IComparable.CompareTo
If TypeOf obj Is Customer Then
Dim cus As Customer = CType(obj, Customer)
Return Me.strName.CompareTo(cus.strName)
Else
Throw New ArgumentException("对象不是Customer类型")
End If
End Function
Public Property Name As String
Get
Return strName
End Get
Set(ByVal value As String)
strName = Name
End Set
End Property
End Class
Sub Main()
Dim Customers() As Customer = {New Customer("李雷"), New Customer("韩梅梅"), New Customer("王芳")}
Array.Sort(Customers)
Dim obj As Customer
For Each obj In Customers
Console.Write(obj.Name & ",")
Next
Console.WriteLine()
Console.WriteLine("-----------------------------")
For i = 0 To Customers.Length - 1
Console.Write(Customers(i).Name & ",")
Next
Console.Read()
End Sub
End Module