(轉)C#4.0的dynamic和var及object關鍵字辨析

來源:互聯網
上載者:User

標籤:

http://www.cnblogs.com/Mainz/archive/2011/03/10/1980060.html

   1:  dynamic a = 10;
   2:  a = a + 10;
   3:  Console.WriteLine(a.GetType());

此段代碼會輸出 System.Int32,第二行不需要類型轉換,因為在運行時識別類型。dynamic 在後台使用 System.Object 類型。但與 object 不同的是,動態類型不需要在編譯時間執行顯式轉換操作,因為它僅在運行時識別類型。關於dynamic和object的詳細區別,看看《What is the difference between “dynamic” and “object” keywords?》

在 C# 類型系統中,dynamic 實際上是一個靜態類型,這個關鍵字使得C# 獲得了動態功能,同時仍然作為靜態類型化語言而存在。這句話如何理解,就要理解它是如何?動態綁定的,看看《Dynamic Binding in C#4.0》

下面的代碼會通過編譯,但運行時報錯。因為當您使用 dynamic 關鍵字時,您就告訴編譯器關閉編譯時間檢查。

   1:  dynamic a = "test";
   2:  a++;

來看看var關鍵字,從C#3.0開始加入的這個,我們對JavaScript的var比較熟悉,看看C#的var:

   1:  var a = 10;
   2:  a = a + 1;
   3:  Console.WriteLine(a.GetType());

此段代碼會輸入 System.Int32, 第二行不需要類型轉換,var是強型別的。當使用 var 關鍵字聲明變數時,將在編譯時間根據初始化字串推斷該變數的類型。 在運行時無法更改該變數的類型。

但要注意的是,var 關鍵字不過是一個指令,它讓編譯器根據變數的初始設定式推斷類型;var 不是類型。

最後看看object,關鍵字 object 表示 System.Object 類型,它是 C# 類階層中的根類型。 此關鍵字經常在編譯時間無法確定物件類型時使用,而這種情況經常在各種互通性情形中發生。

但用object要避免類型轉換(顯式或隱式)

   1:   object a = 10;
   2:   a = (int)a + 10;
   3:   a = "test";

Dynamic可以用來幹嘛?

發揮你的想象力,我可以想到的是可以用來做指令碼支援,比如office支援用vba指令碼寫外掛程式,那我們也可以用這個實現可編寫指令碼的應用。

第二個用處就是用動態方法包,動態方法包就是可在運行時添加和刪除屬性及方法的對象。System.Dynamic命名空間實際上是 DLR 的一部分,可以用 System.Dynamic.ExpandoObject 和 System.Expando.DynamicObject 類與新的 dynamic 關鍵字相結合實現自己需要的東東。

第三個用處是替代反射。有個例子,通過反射調用一個計算機對象的Add方法,先前不知道計算機的類型,只知道有個Add方法,代碼是這樣的:

   1:  object calc = GetCalculator();
   2:  Type calcType = calc.GetType();
   3:  object res = calcType.InvokeMember( "Add", BindingFlags.InvokeMethod, null, new object[] { 10, 20 });
   4:  int sum = Convert.ToInt32(res);

現在不用反射用dynamic就代碼簡潔了:

   1:  dynamic calc = GetCalculator();
   2:  int sum = calc.Add(10, 20);

這樣看來Dynamic還是挺有意思的。

(轉)C#4.0的dynamic和var及object關鍵字辨析

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.