首先說(shuō)明一下,此新特性的專(zhuān)題基于MS五月份分布的C#3.0規(guī)范,但是官方中文版還沒(méi)有出來(lái),結(jié)合自己的實(shí)踐和理解,希望能和大家一起分享某些前沿的東東,很有可能一些地方會(huì)出錯(cuò),望拋磚。
在C# 3.0里面, 可以對(duì)局部變量進(jìn)行隱式類(lèi)型聲明, 就是在聲明時(shí)可以不指定該變量的類(lèi)型, 變量在初始化的時(shí)候會(huì)由編譯器從表達(dá)式的上下文中推出真正的類(lèi)型, 對(duì)開(kāi)發(fā)者來(lái)說(shuō), 無(wú)疑是簡(jiǎn)化了很多, 主要是通過(guò)新的關(guān)鍵字var, 有如下面的例子:
其實(shí)上面的聲明方法和之前在1.x和2.x中以下的聲明方法是等效的:
方便是絕對(duì)的, 就像我們之前在某些別的高級(jí)語(yǔ)中, 早就實(shí)現(xiàn)了此功能, 但是對(duì)某局部變量進(jìn)行隱式類(lèi)型聲明, 也要遵循一定的條件限制:
- 聲明變量時(shí), 必須對(duì)該變量進(jìn)行初始化.
- 初始化該變量時(shí), 必須使用對(duì)應(yīng)的表達(dá)式, 而不能簡(jiǎn)單地用一個(gè)對(duì)象或是集合本身, 但如果是使用了關(guān)鍵字new創(chuàng)建的對(duì)象或是集合卻是合法的, 因?yàn)槟且呀?jīng)是一個(gè)表達(dá)式了.
- 變量初始化的表達(dá)式在編譯時(shí), 絕對(duì)不可以是null類(lèi)型.
- 如果將要進(jìn)行隱式類(lèi)型聲明的局部變量包含多個(gè)聲明, 則要保證每個(gè)初始化表達(dá)式都有相同的編譯時(shí)類(lèi)型, 保持類(lèi)型一致, 不能一會(huì)是int, 一會(huì)又變成了int[].
下面我們來(lái)看幾個(gè)有誤的聲明例子:
例子1:
例子2:
例子3:
在現(xiàn)行的Orcas編譯環(huán)境下, 可以使用var聲明局部變量, 同時(shí)也向后兼容, 即原來(lái)的方式是可用的. 另外, 根據(jù)MS官方的文檔說(shuō)來(lái), var聲明適用于for語(yǔ)句的初始化表達(dá)式中, 在using語(yǔ)句中資源獲得時(shí)也可用, 舉個(gè)例子可以在foreach語(yǔ)句中的迭代變量應(yīng)用var:
不過(guò)這樣用的前提要求該集合類(lèi)型必須可以枚舉, var就可以自動(dòng)被編譯器認(rèn)作int類(lèi)型了。
新聞熱點(diǎn)
疑難解答
圖片精選