引用型態

型態! 在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

文章標籤
全站熱搜
創作者介紹
創作者 GPhettoH 的頭像
GPhettoH

歇息,等待明日的天空

GPhettoH 發表在 痞客邦 留言(0) 人氣(18)