关于泛型集合!
Public Class a(Of type)
Private strkey() As String
Private typevalue() As type
Public Sub add(ByVal key As String, ByVal value As type)
If strkey IsNot Nothing Then
ReDim strkey(strkey.GetUpperBound(0) + 1)
ReDim typevalue(typevalue.GetUpperBound(0) + 1)
Else
ReDim strkey(0)
ReDim typevalue(0)
End If
strkey(strkey.GetUpperBound(0)) = key
typevalue(typevalue.GetUpperBound(0)) = value
End Sub
End Class
Public Class Form1
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Dim strtype As New a(Of String)
Dim inttype As New a(Of Integer)
strtype.add( "1001 ", "zhangfeng ")
inttype.add( "1002 ", 2000)
End Sub
End Class
1:在class a中括号里的of type起什么作用?
2:泛型集合起什么作用,什么时候能用得到?
3:书上说这个代码可以约束参数的类型,但是这样也能约束参数的类型:
Public Class a
Private strkey() As String
Private typevalue() As integer '我直接在这里就可以约束参数类型了,为什么还要多此一举地在类声明中加个“类型占位符”?
Public Sub add(ByVal key As String, ByVal value As integer) '我直接在这里就可以约束参数类型了,为什么还要多此一举地在类声明中加个“类型占位符”?
If strkey IsNot Nothing Then
ReDim strkey(strkey.GetUpperBound(0) + 1)
ReDim typevalue(typevalue.GetUpperBound(0) + 1)
Else
ReDim strkey(0)
ReDim typevalue(0)
End If
strkey(strkey.GetUpperBound(0)) = key
typevalue(typevalue.GetUpperBound(0)) = value
End Sub
End Class
希望能得到高人的指点,谢谢各位好心人!
[解决办法]
甚至可以写:
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Dim strtype As New a(Of String)
Dim strtype2 As New a(Of a(Of String))
Dim inttype As New a(Of Integer)
strtype.add( "1001 ", "zhangfeng ")
strtype2.add( "1001 ", strtype)
inttype.add( "1002 ", 2000)
End Sub
注意到了没,第二个写法甚至都被这个范型一网打尽了。这样不是很容易将代码抽象复用嘛。
[解决办法]
并且也是若类型的 --> 并且也是弱类型的
范型是强类型的。.net的范型尤其比c++强很多,一些不确定能够具有的类型、接口,必须需要明确地用约束方法说明。