一用var定義變量
在C#中提供了一種新的聲明變量的方式這就是var通過這個關鍵字在聲明變量時就無需指定類型了變量類型是在初始化時由編譯器確定的代碼如下:
var ss =
abcd
;
MessageBox
Show(ss
GetType()
ToString());
上面的代碼將顯示SystemString從而證明C#編譯器已經將ss編譯成了String變量了而在輸出ss後再輸入後會看到將String類型變量的相應方法和屬性也列出來了因此可以斷定C#將ss看成了String類型而不是Object所以使用var定義變量同時可以擁有Object和強類型的優點
不過大家不要將var看成是javascript的var它們的區別是javascript是弱類型的語言而且javascript中的變量(也包括用var聲明的變量)可以變換類型如下面的javascript所示
var s =
abcd
;
s=
;
alert(s);
上面的代碼第一次給s賦了一個字符串而第二行代碼又給賦了一個整數這樣的代碼在javascript中沒有任何問題但在C#中var變量一但被初始化確定類型後就無法改變類型了如下面的代碼是無法編譯通過的
var ss =
abcd
;
ss =
;
綜上所述在使用var定義變量時有以下四個特點
必須在定義時初始化也就是必須是var s = abcd形式而不能是如下形式
var s;
s =
abcd
;
一但初始化完成就不能再給變量賦與初始化值類型不同的值了
var要求是局部變量
使用var定義變量和object不同它在效率上和使用強類型方式定義變量完全一樣但筆者建議如果事先知道變量的類型盡量使用強類型方式來聲明變量否則就會造成由於大量使用var而使得開發人員很難斷定某個變量是什麼類型這樣不利於程序的維護和升級
雖然var有利有弊但筆者個人認為如果將動態語言轉換成C#語言可以考慮使用var來定義變量這是因為動態語言沒有類型而要將其轉換成強類型的C#語言就必須給變量指定個類型但事先確定類型是很費勁的不如將其指定成var再由C#編譯器去確定變量的具體類型那麼如果在轉換的過程中發現動態語言的變量改變了類型該怎麼辦呢?這個可以使用第三部分要講的匿名類來解決這個問題
[] [] []
From:http://tw.wingwit.com/Article/program/net/201311/15231.html