2. Implicitly Typed Local Variables(隱式類型)與Implicitly Typed Array(隱式類型數組)

寫過JavaScript的朋友或許早就一眼盯住了上文中提到的新關鍵字“var”,是啊,多麼熟悉的字眼兒,如今竟然也在C#當中出現了!如何使用呢?讓我們來看一段很簡短的代碼吧:

   1: static void Main(string[] args)
   2: {
   3:     var name = "ZeroCool";
   4:     var age = 24;
   5:  
   6:     Console.WriteLine(name + " is " + age + " years old.");
   7: }

如果您是在C# 3.0中編寫這段代碼,那麼就可以運行。也許您會問,用var有什麼好處呢,是否object也可以代替它呢?是的,可以代替,object是基類型,當然可以用它來聲明任何類型的變量。但是,如果用object來聲明值類型就會引起裝箱操作,這會降低性能。另外,如果您要用幾個object聲明的變量進行運算的話,您必須得把它們挨個轉換成相應的類型才行,這樣做其實是費力不討好的。關鍵字var的優點就在於它使得您可以非常便利地聲明隱式類型變量,編譯器可以在用到該變量的時候根據它的值來反推出它的類型。注意,var並不是具體的變量類型,它只是一個聲明符,它的作用就是將數據類型的聲明交給編譯器去做。您可以用它來聲明任何類型的變量,正如上一段程序中的變量age,您肯定知道它是一個int型變量,但實際上您寫下這句代碼的時候它還不是,只有在編譯的時候編譯器根據它的值反推出它是int型時,它纔是真正意義上的int型。

前面看到的是用var關鍵字聲明一些簡單類型的變量,那麼複雜類型的變量例如數組、集合等,是否也可以使用var關鍵字呢?答案是肯定的,請看:

   1: static void Main(string[] args)
   2: {
   3:     var memberNames = new[] { "ZeroCool", "Michael", "Somebody" };
   4:  
   5:     foreach (var item in memberNames)
   6:     {
   7:         Console.WriteLine(item.ToString());
   8:     }
   9:  
  10:     Console.ReadLine();
  11: }

上面這段代碼是可以正常運行的,同樣的,.NET爲我們提供的其它類型我們都可以用var來聲明,同時也包括用戶自定義類型。

另外,更強大的一點是,隱式類型數組中的元素可以通過匿名對象初始器來創建匿名類型的數據結構,例如:

   1: static void Main(string[] args)
   2: {
   3:     var memberInfo = new[] {
   4: {
   5: Name = "ZeroCool",
   6: Details = new[] { "[email protected]", "China" }
   7:     },
   8: {
   9: Name = "Michael",
  10: Details = new[] { "[email protected]", "China", "Programmer" }
  11:     }
  12: };
  13: }

但是在使用var關鍵字聲明變量的時候有幾點注意事項:

    1. 聲明變量時必須初始化;
      • 錯誤:var name;
    2. 初始器必須是一個表達式;
      • 錯誤:var names = {"ZeroCool", "Autumoon"};
    3. 初始器表達式必須是一個不爲null類型的編譯時類型;
      • 錯誤:var name = null;
    4. 局部變量的聲明中不能包含多個聲明符;
      • 錯誤:var name = "ZeroCool", country = "China";
    5. 初始器不能使用被聲明變量自身;
      • 錯誤:var name = name + " A";
    6. 隱式類型數組在聲明時必須確保數組內部成員的類型唯一;
      • 錯誤:var names = new[] {"ZeroCool", 123};

隱式類型的內容比較簡單,使用起來也非常簡便,我們先介紹到這裏,接下來將是Extension Methods(擴展方法),欲知後事如何,且聽下回分解!

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