我們要來(lái)看的第二個(gè)VB新語(yǔ)法稱(chēng)為『區(qū)域類(lèi)型推斷』,簡(jiǎn)單的說(shuō),就是當(dāng)你宣告變量時(shí)不指定類(lèi)型的時(shí)后編譯程序會(huì)自動(dòng)幫你決定變量的類(lèi)型,而不是一律的以object作為變量的類(lèi)型,運(yùn)算時(shí)再通過(guò)boxing來(lái)解決。
過(guò)去,當(dāng)你鍵入底下的程序代碼:
Dim v
這個(gè)變量v是Object類(lèi)型,在舊版的VB 6.0當(dāng)中,則是variant,如今,當(dāng)你在編輯器當(dāng)中輸入這樣的程序代碼:
Dim v = 3
你的變量v類(lèi)型會(huì)自動(dòng)設(shè)為integer,倘若是:
dim v = 3.14
你的變量v類(lèi)型會(huì)自動(dòng)設(shè)為double。
總括來(lái)說(shuō),編譯程序會(huì)依照初始值來(lái)決定變量類(lèi)型。
甚至,變量的類(lèi)型也可以由函數(shù)的返回值來(lái)決定,例如:
Dim ret = getBMI()
嚴(yán)格說(shuō)起來(lái),這些動(dòng)作都是編輯器自動(dòng)幫你做的, 對(duì)程序代碼來(lái)說(shuō)沒(méi)有什么太大的影響,有一些部分也是因?yàn)樵谶^(guò)去VB本來(lái)就會(huì)進(jìn)行相當(dāng)多的隱含類(lèi)型轉(zhuǎn)換,所以這些動(dòng)作對(duì)開(kāi)發(fā)人員來(lái)說(shuō)沒(méi)啥特別的感覺(jué),但是實(shí)務(wù)上它可以加快程序運(yùn)行的速度(因?yàn)椴恍枰僮鲞@些類(lèi)型轉(zhuǎn)換)
然而,你可能看到更多的使用場(chǎng)合是把這個(gè)機(jī)制和LINQ的查詢(xún)返回值混在一起,再回頭看前幾天介紹的LINQ語(yǔ)法:
’查詢(xún)BMI值大于25的人
Dim result = From c In matrix Where c.BmiValue > 25
從這邊你會(huì)看到通過(guò)查詢(xún)語(yǔ)法所返回的值,也是通過(guò)這樣的機(jī)制來(lái)建立的??偟膩?lái)說(shuō)VB在語(yǔ)法上的更新,蠻多都實(shí)現(xiàn)在LINQ相關(guān)的應(yīng)用上,這也是先前說(shuō)過(guò)VB新語(yǔ)法與LINQ幾乎脫不了關(guān)系。
另外,由于有類(lèi)型推斷,你可以在VB當(dāng)中直接這么寫(xiě):

你可以直接把XML以Copy Paste的方式貼到程序代碼編輯區(qū),然后定義一個(gè)變量來(lái)承接,由于具有類(lèi)型推斷的功能,因此xmlData變量會(huì)被定義成xElement類(lèi)型,寫(xiě)起程序來(lái)方便多了。
過(guò)去,當(dāng)你鍵入底下的程序代碼:
Dim v
這個(gè)變量v是Object類(lèi)型,在舊版的VB 6.0當(dāng)中,則是variant,如今,當(dāng)你在編輯器當(dāng)中輸入這樣的程序代碼:
Dim v = 3
你的變量v類(lèi)型會(huì)自動(dòng)設(shè)為integer,倘若是:
dim v = 3.14
你的變量v類(lèi)型會(huì)自動(dòng)設(shè)為double。
總括來(lái)說(shuō),編譯程序會(huì)依照初始值來(lái)決定變量類(lèi)型。
甚至,變量的類(lèi)型也可以由函數(shù)的返回值來(lái)決定,例如:
Dim ret = getBMI()
嚴(yán)格說(shuō)起來(lái),這些動(dòng)作都是編輯器自動(dòng)幫你做的, 對(duì)程序代碼來(lái)說(shuō)沒(méi)有什么太大的影響,有一些部分也是因?yàn)樵谶^(guò)去VB本來(lái)就會(huì)進(jìn)行相當(dāng)多的隱含類(lèi)型轉(zhuǎn)換,所以這些動(dòng)作對(duì)開(kāi)發(fā)人員來(lái)說(shuō)沒(méi)啥特別的感覺(jué),但是實(shí)務(wù)上它可以加快程序運(yùn)行的速度(因?yàn)椴恍枰僮鲞@些類(lèi)型轉(zhuǎn)換)
然而,你可能看到更多的使用場(chǎng)合是把這個(gè)機(jī)制和LINQ的查詢(xún)返回值混在一起,再回頭看前幾天介紹的LINQ語(yǔ)法:
’查詢(xún)BMI值大于25的人
Dim result = From c In matrix Where c.BmiValue > 25
從這邊你會(huì)看到通過(guò)查詢(xún)語(yǔ)法所返回的值,也是通過(guò)這樣的機(jī)制來(lái)建立的??偟膩?lái)說(shuō)VB在語(yǔ)法上的更新,蠻多都實(shí)現(xiàn)在LINQ相關(guān)的應(yīng)用上,這也是先前說(shuō)過(guò)VB新語(yǔ)法與LINQ幾乎脫不了關(guān)系。
另外,由于有類(lèi)型推斷,你可以在VB當(dāng)中直接這么寫(xiě):

你可以直接把XML以Copy Paste的方式貼到程序代碼編輯區(qū),然后定義一個(gè)變量來(lái)承接,由于具有類(lèi)型推斷的功能,因此xmlData變量會(huì)被定義成xElement類(lèi)型,寫(xiě)起程序來(lái)方便多了。