區域型別推斷(Local Type Inference)
區域型別推斷是讓你在宣告區域變數時,可以不必使用As宣告其明確型別的一種語法。
程式一:區域型別推斷
Dim Name = "KKBruce" Dim Height = 173 Dim Friends = New String() {"Mary", "Kelly", "Cindy"}
在Dim之後沒有As Type的宣告,Visual Basic的Compiler會透過後面的值或運算式(Expression)來判斷型別,例如"KKBruce"這個值很明顯是"字串(String)型別",所以Name變數的型別就會是"String"。所以這樣判斷的動作我們稱「區域型別推斷(Local Type Inference)」。
隱含型別(Implicitly Type)
程式一裡的Dim Name與Dim Height稱它「隱含型別區域變數」,因為從宣告程式碼本身是看不出型別,而必須經過"區域型別推斷"的動作後才能判定型別,所以稱"隱含"不是沒有型別。程式一裡的Dim Friends稱它「隱含型別陣列」,單從Dim Friends是無法判定,因為後面的值是「數值陣列」,經過"區域型別推斷"後,Dim Friends就會成為「數值陣列」型別。
匿名型別(AnonyMous Type)
匿名型別會與隱含型別一起使用。程式二:匿名型別
'Dim person為隱含型別 'New With {...}為匿名型別 Dim person = New With {.Name = "KKBruce", .Height = 173} Response.Write(person.Name) '結果為KKBruce Response.Write(person.GetType())
你會發現New With本身沒有"型別(Type)"所以稱「匿名型別」。別外可以發現此person物件,裡面包含了String型別和Integer型別(它到底是String還是Integer?),這在以前是做不到的。而person到底是什麼型別?我們可以從person.GetType()得知,Visual Basic會在Compiler時給它一個「VB$AnonymousType_0`2[System.String,System.Int32]」的匿名型別,此匿名型別裡有String及Int32兩個複合型別。
實例
以上不論是區域型別推斷、隱含型別、匿名型別,有很大一部份都是為了LINQ及.NET Framework 4所準備,但在一般情況下,也是可以使用。程式三:隱含型別取得所有網頁上控制項
'c是隱含型別 For Each c In Me.Form.Controls If TypeOf c Is TextBox Then ' Do Some thing ... End If Next
原始的c應該是「c As Control」(或是使用c As Object),但這裡使用了隱含型別來替代,透過這個For Each方法,可以取得目前網頁上所有控制項,然後再進行應用。
沒有留言:
張貼留言
感謝您的留言,如果我的文章你喜歡或對你有幫助,按個「讚」或「分享」它,我會很高興的。