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