VS2008&C#3.5語言特色系列[視頻]:隱式類型的局部變量(Implicitly Typed Local Variables)

 編程語言可以分爲兩類:一種是強類型語言,譬如C#、JAVA、C++等,另外一類是弱類型語言,比如一些腳本語言javascript等。
強類型語言是,變量在使用前必須定義,類型之間區分比較明顯,如果兩個類型不相容,則不能隱式的轉換,必須進行顯示轉換。
弱類型語言是,變量在使用前不要求必須定義,類型之間沒有明顯的界限,變量在使用時會自動轉換爲合適的目標類型。
也就是說,強類型語言的變量必須有明確的類型,如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)
 var integer = 12345

b) 
integer = "http://www.fengzhiqiang.name";

3. 
var  s=null   //錯誤!因爲編譯器不能判斷出null的類型

4. 
var x;  //錯誤,隱式類型的局部變量必須在聲明的時候初始化

5. 編譯器必須應該能夠從等號右邊推斷出類型,初始化語句必須是一個表達式,初始化表達式不能包含它自身,不可以是對象或集合初始化器,但是可以是包含一個對象或集合初始化器的一個new表達式(即匿名類型)。
a) 
var MichaelFeng ={“豐志強”,” http://www.fengzhiqiang.name”,”專注.NET”}     //錯誤
b)
 var MichaelFeng = new []"豐志強"" http://www.fengzhiqiang.name""專注.NET" };   //正確

6. var的聲明僅僅限於局部變量,也可以包含在foreach、for、using語句中。
static void loop()
        
{
            var MichaelFeng 
= new string[] "豐志強"," http://www.fengzhiqiang.name”, "專注.NET" };
            foreach (var i in MichaelFeng)
            
{   Console.WriteLine("MichaelFeng :{0}", i);  }
        }

7. Var不能作爲方法的參數或者返回值
這句話錯誤:   
public var MyMethod(var x, var y) { }
但是下面的是正確的:
static string GetAnInt()
        
{   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部分)

http://download.csdn.net/source/405987

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章