引用型態
型態! 在Visual Basic 裡,常見的型態類型有「類別」、「型別」、「結構」。這三者當然是有差異的,這篇文章不是要討論這些差異,而是要討論如何「引用型態」。
既然型態已經包括了類別、型別、結構三者,因此引用型態對三者也都有效。
首先我們要認識到Visual Basic 的型態解釋是很雜亂的,一個型態也可以是一個型態。也就是說,像「Integer」這樣一個型別,是可以被存入一個寫手定義的變數內,並且自由使用的,該變數的型態則是System.Type (通常可寫成Type)。但是要注意,Integer 同時是型別,也不是型別,在取得「型別或類別的型態」時可以使用函式GetType(型別)──然而不適用於結構。
]Dim testType As Type = GetType(Integer)
上面那移項一點實用性都沒有說真的,Visual Basic 其實有另一個可獲得型態的方法。該方法GetType 是一個無參數函式,用來取得執行個體的型態──支援類別、型別、結構。
]Dim test As Integer = 0
]Dim testType As System.Type = test.GetType
但是,無論如何,我們取得的型態不是型別、不是類別、不是結構! 把得到的型態放到Dim 語法內當做型態是無效的! 但是我們可以利用Array 的內建函式CreateInstance 來產生一個引入被變數儲存的型態所支配的陣列。其參數為CreateInstance(型態, 索引)。
]Dim test As Integer = 0
]Array.CreateInstance(test.GetType, 9) //產生一個最大索引直為9,最小索引直為0 的Integer 陣列。
引入: 自定義
為了取得一個陣列元素的型態,我們自定義了一個函式ArrayType(陣列)。
]Function ArrayType(ByVal Origin As Array, Optional ByVal NoNothing As Type = Nothing) As Type
]If (Origin Is Nothing) Then
]Return NoNothing
]End If
]Return Type.GetType(Replace(Origin.GetType.ToString, "[]", Nothing, , 1))
]End Function
