程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> 使用dynamic來簡化反射實現

使用dynamic來簡化反射實現

編輯:C#入門知識

    dynamic是Framework4.0的新特性,dynamic的出現讓C#具有了弱語言類型的特性,編譯器在編譯的時候,不再對類型進行檢查,不會報錯,但是運行時如果執行的是不存在的屬性或者方法,運行程序還是會拋出RuntimeBinderException異常。   var 與 dynamic 的區別 var是編譯器給我們的語法糖,編譯期會匹配出實際類型並且替換該變量的聲明。 dynamic 被編譯後,實際是一個object類型,只不過編譯器對dynamic做特殊處理,將類型檢查放到了運行期。   這從VS的編譯器窗口可以看出來,var 聲明的變量在VS中有智能提示,因為VS能推斷出來實際類型;dynamic聲明的變量沒有智能提示。   利用dynamic 簡化反射   復制代碼     public class DynamicSample     {         public string Name { get; set; }         public int Add(int a, int b)         {             return a + b;         }     }     public partial class DynamicPage : System.Web.UI.Page     {         protected void Page_Load(object sender, EventArgs e)         {             //普通的反射做法             DynamicSample dynamicSample = new DynamicSample();             var addMethod = typeof(DynamicSample).GetMethod("Add");             int res = (int)addMethod.Invoke(dynamicSample, new object[] { 1, 2 });                           //dynamic的做法,簡潔,推薦             dynamic dynamicSample2 = new DynamicSample();             int res2 = dynamicSample2.Add(1, 2); //Add不會智能提示出來         }     } 復制代碼 使用dynamic還有一個優點就是,比沒有優化過的反射性能好,跟優化過的反射性能相當,但代碼整潔度高,作者也是貼了代碼並貼出運行結果而已,沒有作過多的介紹,所以此處作罷了。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved