日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

var和dynamic的区别及如何正确使用dynamic?

發布時間:2024/10/12 编程问答 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 var和dynamic的区别及如何正确使用dynamic? 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1.var與dynamic的區別

  ? C#中的很多關鍵詞用法比較容易混淆,var和dynamic就是其中一組,但其實它們是有本質的區別的。var 在編譯階段已經確定類型,在初始化時候,必須提供初始化的值,而dynamic則可以不提供,它是在運行時才確定類型。

1 static void Main(string[] args)2 {3 //var 在編譯階段已經確定類型4 var number = 3;5 6 //dynamic在編譯期間不進行任何的類型檢查,而是將類型檢查放到了運行期7 dynamic dyn = 3;8 9 dyn = "hello world"; 10 11 //runtime eror 12 //字符串沒有 "fn不存在的方法" 的方法,但在語法檢查時通過,不會提示語法錯誤 13 var s = dyn.fn不存在的方法(); 14 15 Console.ReadKey(); 16 }

2.ExpandoObject類型的使用

? ? 當我們因為某種目的而需要創建一些臨時類型的變量時,我們可以會像下面這樣做:

?

1 var a = new { Name = "Paul Huang", Age = 24 }; 2 3 Console.WriteLine("Name is {0},Age is {1}", a.Name, a.Age);

?

? ? 現在要介紹一種新的類型ExpandoObject,它是專為動態行為而設計的類型,用法如下:

1 static void Main(string[] args) 2 { 3 dynamic a = new ExpandoObject(); 4 5 a.Name = "Paul Huang"; 6 7 a.Age = 24; 8 9 Console.WriteLine("Name is {0},Age is {1}", a.Name, a.Age); 10 12 }

? ? ?實際上,ExpandoObject類顯式實現了?IDictionary<string,object> 接口,所以,我們可以知道,其實它里面就是用一個字典來存儲動態賦值的數值的,鍵的類型為字符串,表示屬性名;值的類型為object,表示任何類型。

? ? ?咱們把它里面的字典數據輸出來:

1 IDictionary<string, object> dic = a as IDictionary<string, object>; 2 3 foreach (var pv in dic) 4 { 5 Console.WriteLine("Key = {0} , Value = {1}", pv.Key, pv.Value); 6 }

? ? ?所為為什么不管你如何動態設置屬性,它都可以進行解析,就是這個原因,里面用一個字典來負責存取數據。

3.dynamic在反射時的應用

  由于dynamic在運行時才檢查類型,所以有時候會出現錯誤,因此使用它必須得法,那么何時使用它比較方便呢?我們先定義一個Person類,然后用反射進行動態調用起Talk方法:

1 class Person 2 { 3 public void Talk(string msg) 4 { 5 Console.WriteLine(msg); 6 } 7 } 1 class Program2 {3 static void Main(string[] args)4 {5 Type t = typeof(Person);6 7 Object obj = Activator.CreateInstance(t);8 9 t.InvokeMember("Talk", BindingFlags.InvokeMethod, null, obj, new object[] { "hello world" }); 10 11 Console.ReadKey(); 12 } 13 }

? ?

? ? ?在反射的時候,傳統的方法的方法調用往往比較繁瑣,而用dyanmic則非常簡化,而且直觀:

1 class Program2 {3 static void Main(string[] args)4 {5 Type t = typeof(Person);6 7 dynamic obj = Activator.CreateInstance(t);8 9 obj.Talk("hello world"); 10 11 Console.ReadKey(); 12 } 13 }

?

轉載于:https://www.cnblogs.com/JustYong/p/5113197.html

總結

以上是生活随笔為你收集整理的var和dynamic的区别及如何正确使用dynamic?的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。