強類型語言是,變量在使用前必須定義,類型之間區分比較明顯,如果兩個類型不相容,則不能隱式的轉換,必須進行顯示轉換。
弱類型語言是,變量在使用前不要求必須定義,類型之間沒有明顯的界限,變量在使用時會自動轉換爲合適的目標類型。
也就是說,強類型語言的變量必須有明確的類型,如int、string等,而弱類型語言則沒有這樣的要求,譬如javascript中的類型都可以是var。C#3.5中引入了一個新的關鍵字"var",可以代表任何類型,但是不要認爲C#在往弱類型語言靠攏,這裏的"var"和javascript中的"var"有本質的區別。
在C#3.5中,如果有一個局部變量被聲明爲var,這個聲明被視爲隱式類型的局部變量(Implicitly Typed Local Variables)聲明,然後由編譯器根據等號右邊的初始化表達式來推斷變量的類型
var的使用注意以下幾個方面:
1. 編譯的時候,局部變量被編譯爲具體類型;根據等號右邊的表達式,決定類型
2. 編譯器自動判斷和決定類型,var僅僅起佔位符的作用;不同於object,var聲明出來的是強類型,如下是錯誤的:
a)
b)
3.
4.
5. 編譯器必須應該能夠從等號右邊推斷出類型,初始化語句必須是一個表達式,初始化表達式不能包含它自身,不可以是對象或集合初始化器,但是可以是包含一個對象或集合初始化器的一個new表達式(即匿名類型)。
a)
b)
6. var的聲明僅僅限於局部變量,也可以包含在foreach、for、using語句中。
{
var MichaelFeng = new string[] { "豐志強"," http://www.fengzhiqiang.name”, "專注.NET" };
foreach (var i in MichaelFeng)
{ Console.WriteLine("MichaelFeng :{0}", i); }
}
7. Var不能作爲方法的參數或者返回值
這句話錯誤:
{ var retVal = “豐志強”;
return retVal; }
隱式類型的局部變量深入分析(詳情請參看視頻)
1. 使用Console.WriteLine("MichaelFeng is : {0}", MichaelFeng.GetType().Name);
2. 使用ILDASM
3. 隱式類型的局部變量較多用在linq查詢表達式的返回值,其他地方慎用(一方面給其他人閱讀帶來難度,另一方面給排錯也帶來問題),只用在不太容易判斷類型的地方
視頻下載:
VS2008&C#3.5語言特色系列視頻:隱式類型的局部變量(第1部分,共2部分)
http://download.csdn.net/source/405984
VS2008&C#3.5語言特色系列視頻:隱式類型的局部變量(第2部分,共2部分)