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還有一個優點就是,比沒有優化過的反射性能好,跟優化過的反射性能相當,但代碼整潔度高,作者也是貼了代碼並貼出運行結果而已,沒有作過多的介紹,所以此處作罷了。