Option Strict Off
' 声明一个使用 IComparable 接口的类 Vector
Public Class Vector : Implements IComparable
Public X As Integer
Public Y As Integer
Public Sub New()
X = 0
Y = 0
End Sub
Public Sub New(ByVal vX As Integer, ByVal vY As Integer)
X = vX
Y = vY
End Sub
Public Sub Show() '用来显示向量坐标 (X,Y)
Console.Write("({0},{1}) ", X, Y)
End Sub
'实现出 IComparable 接口中的 CompareTo 方法
Public Function CompareTo(ByVal obj As Object) As _
Integer Implements IComparable.CompareTo
Return (X ^ 2 + Y ^ 2) - (obj.X ^ 2 + obj.Y ^ 2)
End Function
End Class
Module Module1
Sub Main()
Dim I As Integer
Dim vecArray() As Vector
'定义一个内含五个向量的数组
vecArray = New Vector() {New Vector(20, 10), _
New Vector(50, 20), _
New Vector(90, 40), _
New Vector(10, 10), _
New Vector(40, 30)}
Console.WriteLine("乐博网提示:排序前 ...")
For I = 0 To UBound(vecArray)
vecArray(I).Show()
Next
Console.WriteLine()
Array.Sort(vecArray) '调用 System.Array 类的 Sort 方法
Console.WriteLine("乐博网提示:排序后 ...")
For I = 0 To UBound(vecArray)
vecArray(I).Show()
Next
Console.WriteLine()
Console.Read()
End Sub
End Module
上面示例中的委托函数
Public Function CompareTo(ByVal obj As Object) As _
Integer Implements IComparable.CompareTo
Return (X ^ 2 + Y ^ 2) - (obj.X ^ 2 + obj.Y ^ 2)
End Function
我们一般调用时直接委托函数名称CompareTo来调用。
上面示例中Sub Main过程中没有调用CompareTo痕迹,但是,运行时委托过程确实起到作用。
不调用CompareTo名称能够起到作用真是罕见。
请程序员详细解释这个问题。上面代码是完整的,可以直接复制到工程能够运行。
------解决方案--------------------
在CompateTo中任意一行下断点。
调试,运行到此处。
然后打开调用堆栈
可以看到谁调用你了。
另外你想想,不知道相互大小关系,sort凭什么排序的。
------解决方案--------------------
看文档。或者有源代码看源代码。