读书人

关于泛型集合!解决办法

发布时间: 2012-02-06 15:52:45 作者: rapoo

关于泛型集合!
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++强很多,一些不确定能够具有的类型、接口,必须需要明确地用约束方法说明。

读书人网 >VB Dotnet

热点推荐