首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > VB Dotnet >

关于泛型集合!解决办法

2012-02-06 
关于泛型集合!PublicClassa(Oftype)Privatestrkey()AsStringPrivatetypevalue()AstypePublicSubadd(ByValk

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

热点排行