VB當中的新語法 一

2021-08-22 17:43:25 字數 1856 閱讀 8091

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

——匿名型別

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

dim stud1 as new students with

上述指令會建立乙個students 物件的實體,並且填入預設的值。

這樣的寫法簡便不少,該物件的類宣告如下:

public class students

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

public name as string

public score as single

end class

上面黃色程式**這樣的方式我們稱之為命名型別的物件宣告,既然,有命名型別,就一定會有匿名型別的宣告方式,語法如下:

dim stud2 = new with

這個就炫了吧,不用型別照樣可以宣告出乙個物件實體,這個在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的編譯程式比過去忙碌了許多。

VB當中的新語法 二

vb當中的新語法 二 區域型別推斷 與 xml 當你看完筆者這幾篇關於vb 的新語法介紹之後,你會發現其實都跟 linq 有很密切的關係,儘管有些功能看似語法上的新擴充,但是實務上會使用到這些語法的場合,大多跟 linq 多少脫不了關係呢 接著我們要來看的第二個 vb新語法稱為 區域型別推斷 簡單的...

VB當中的新語法 二

vb當中的新語法 二 區域型別推斷 與 xml 當你看完筆者這幾篇關於 vb的新語法介紹之後,你會發現其實都跟 linq 有很密切的關係,儘管有些功能看似語法上的新擴充,但是實務上會使用到這些語法的場合,大多跟 linq 多少脫不了關係呢 接著我們要來看的第二個vb新語法稱為 區域型別推斷 簡單的說...

VB當中的新語法 四

vb當中的新語法 四 lambda 這個世界上很多東西是沒有道理的.不知道你是不是也會這樣覺得。老實說,過去寫程式寫慣了的人,一開始看到lambda表示式會覺得怪怪的,我先講它的意義,官方說法是,lambda表示式可以簡化程式 的寫法 增加可讀性 老實說我覺得簡化程式 的寫法這件事情很少跟增加可讀性...