VB當中的新語法(一)

 

VB當中的新語法() <?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

—— 匿名類型

 

上週跟大家介紹了LINQVB當中的應用之後,這次順帶介紹一下VB在這個版本中的改變,在VB 2008當中,配合LINQ新增了許多新的語法,底下這也是VB在建立對象時的新寫法:

 

  Dim stud1 As New students With {.name = "David", .score = 100}

 

上述指令會建立一個students 對象的實體,並且填入默認的值。

這樣的寫法簡便不少,該對象的類聲明如下:

 

Public Class students

  '這邊應該寫成property, 只是我稍微偷懶一下寫成field,不影響demo

  Public name As String

  Public score As Single

End Class

 

上面黃色程序代碼這樣的方式我們稱之爲命名類型的對象聲明,既然,有命名類型,就一定會有匿名類型的聲明方式,語法如下:

 

Dim stud2 = New With {.name = "David", .score = 100}

 

這個就炫了吧,不用類型照樣可以聲明出一個對象實體,這個在VB 2008稱爲匿名類型,其實和LINQ有相當大的關係,幹嘛搞出一個匿名類型呢? 它可以方便我們不需要事先建立一個類,就可以具有對象實體,會有這樣的需求?

 

某些時候,我們只想要產生一個對象,並且隨手就拿來用了,我們可能懶的聲明一個對象的類,然後再用New指令產生一個對象實體,也有時候我們只是希望建立一個臨時的對象來存放特定數據處理(查詢)之後的結果,最典型的例子就是LINQ(之後再述),因此匿名類型就應運而生了。

 

匿名類型並不特別也不神奇,實現的方式很簡單,Compiler 會自動依照你的需要,幫您建立一個類Class,幫你自動決定類中屬性的型態。這個自動建立的類沒有名稱(因爲是編譯階段自動建立的,所以沒名稱也不要緊,反正我們在程序代碼當中也不會用到這個類,只會用到這個類產生的對象實體)、這個類會直接繼承自 Object,並且包含您在聲明對象時指定的屬性。

 

這個特性是一個基礎,它讓LINQ查詢的結果可以自動建立成一個對象,例如我們在介紹的LINQ功能中,有一段程序代碼:

 

Structure BMI  

  Dim name As String  

  Dim height As Integer  

  Dim weight As Integer  

  Dim BmiValue As Single

End Structure

 

Dim matrix(5) As BMI

 

(......)

 

'查詢BMI值大於25的人

Dim result = From c In matrix Where c.BmiValue > 25

 

其中matrix是一個對象沒有錯,但是result是什麼類型? 怎麼出現的? LINQ查詢會建立出一個對象? 怎麼建立的呢? 關鍵就在匿名類型。

 

有了匿名類型這樣的技術作爲基礎,LINQ的查詢結果(對象)就可以不需要事先建立一個特定類作爲存放查詢結果的數據類型。而可以通過編輯器自動產生這個類,我們只需要直接把結果(對象)拿來用,因爲我們在意的是這個查詢結果對象而非該類本身。

 

不過這邊要注意,並非所有的LINQ查詢結果一定就需要建立一個匿名類型來存放,也有可能只需要系統內建的類型即可。

 

例如:

Dim result = From c In matrix Where c.BmiValue > 25 Select c.name

 

result 就只需要String類型即可。

 

anyway, 匿名類型確實讓開發人員在編寫程序代碼的時候有更多的可能性,也方便許多,同時間,你也會發現,編譯程序暗地裏幫我們做了很多的事情...說到這個,下次有機會時來談談編譯程序是怎麼看待LINQ指令的,你會發現VB2008的編譯程序比過去忙碌了許多。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章