nbsp; v2 = temp
End Sub
注意“Of ItemType”,当Swap方法被调用时,除了必须提供所需的参数,还必须传入一个数据类型。这个数据类型会代替任何实例中的ItemType。下面的例子调用了Swap:
Swap(Of Integer)(v1, v2)
这条语句告诉Swap方法它将交换的是Integer类型。如果你回过头去看看Swap的代码,这条语句的意思就是让JIT将所有的ItemType换成Integer,这个Swap方法实际上已经被JIT重写成:
Private Sub Swap(ByRef v1 As Integer, ByRef v2 As Integer)
Dim temp As Integer
temp = v1
v1 = v2
v2 = temp
End Sub
这是实际执行的代码,JIT生成一个专用于Integer类型的方法。如果你接下来想要排序字符串类型,你就可以用另一Swap的调用如下:
Swap(Of String)(v1, v2)
当方法执行的时候,JIT会生成另一个版本的Swap,这次是特定成String类型的:
Private Sub Swap(ByRef v1 As String, ByRef v2 As String)
Dim temp As String
temp = v1
v1 = v2
v2 = temp
End Sub
下面是一个使用泛型Swap的冒泡排序的完整例子:
Private Sub btnSortIntegers_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSortIntegers.Click
Dim ints(9) As Integer
Dim r As New Random
For i As Integer = 0 To 9
ints(i) = r.Next(1, 100)
Next
'''' 冒泡排序
For j As Integer = 0 To 9
For k As Integer = 9 To 1 Step -1
If ints(k) < ints(k - 1) Then
Swap(Of Integer)(ints(k), ints(k - 1))
End If
Next
Next
txtOutput.Text = "Sort Integers" & vbCrLf
For i As Integer = 0 To 9
txtOutput.Text &= ints(i) & vbCrLf
Next
End Sub
泛型类型
最后一点,你能够创建完全泛型的类型,使用这种“Of ItemType”方法创建类的声明如下:
Public Class SomeClass(Of ItemType)
Private internalVar as ItemType
Public Function SomeMethod(ByVal value As ItemType) As ItemType
End Function
End Class
这段代码对类的作用与方法是相同的。JIT编译器会简单地将实例中的ItemType替换成实例化时特别指明的类型。
约束
泛型技术还支持一种叫做约束的特性。这项功能确保在指定类型的时候,传入的类型最起码要实现某些功能。比如你要实现一种排序算法,你需要确保传入的类型能够实现IComparible接口。你可以用约束来完成这个设想:
Public Class SomeClass(Of ItemType As IComparible)
Public Function SomeMethod(ByVal value As ItemType) As ItemType
End Function
End Class
上一页 [1] [2] [3] 下一页 [VB.NET程序]Visual Basic 6 逆向工程与反逆向工程 (2) [VB.NET程序]Visual Basic 6 逆向工程与反逆向工程 (1) [VB.NET程序]用Visual Basic创建复杂窗体 [VB.NET程序]Visual Basic的类对于面向对象的支持 [VB.NET程序]如何在Visual Basic 6.0 中连接加密的Access数据库 [VB.NET程序]使用Visual Basic操纵XML文档 [VB.NET程序]Visual Basic.Net连各种数据库的几种方法 [VB.NET程序]Visual Basic .NET资源工具包 [VB.NET程序]效率提高两倍!——Visual Basic.net 新力量 [VB.NET程序]复杂和高效——Visual Basic.net新力量
|