C#使用dynamic一行代碼實(shí)現(xiàn)反射操作
C#用dynamic一行代碼實(shí)現(xiàn)反射操作
dynamic簡(jiǎn)介
dynamic是.NET Framework4.0的新特性。dynamic的出現(xiàn)讓C#具有了弱語言類型的特性。編譯器在編譯的時(shí)候不再對(duì)類型進(jìn)行檢查,編譯時(shí)默認(rèn)dynamic對(duì)象支持你想要的任何特性。
dynamic簡(jiǎn)化反射實(shí)現(xiàn)
使用dynamic來簡(jiǎn)化反射實(shí)現(xiàn)是一種比較常見的編程技巧,它可以減少代碼的復(fù)雜性并提高可讀性。下面是一個(gè)使用dynamic來簡(jiǎn)化反射實(shí)現(xiàn)的示例:
// 定義一個(gè)類 public class Person { public string Name { get; set; } public int Age { get; set; } public string Gender { get; set; } } // 創(chuàng)建一個(gè)對(duì)象并設(shè)定屬性值 var person = new Person { ????Name?=?"劉備", ????Age?=?30, Gender = "男" }; // 使用反射獲取屬性值 var type = person.GetType(); var properties = type.GetProperties(); foreach (var property in properties) { var value = property.GetValue(person); Console.WriteLine($"{property.Name}:{value}"); } // 使用dynamic來簡(jiǎn)化反射實(shí)現(xiàn) dynamic dynamicPerson = person; Console.WriteLine($"Name:{dynamicPerson.Name}, Age:{dynamicPerson.Age}, Gender:{dynamicPerson.Gender}"); ?//關(guān)注公眾號(hào):Java技術(shù)迷,領(lǐng)取java相關(guān)書籍
可以看到,使用dynamic來簡(jiǎn)化反射實(shí)現(xiàn)可以將代碼變得更加簡(jiǎn)潔易讀,同時(shí)也可以避免一些繁瑣的反射操作。使用dynamic可能會(huì)帶來一些性能上的損失,應(yīng)該根據(jù)具體情況進(jìn)行選擇。具體會(huì)不會(huì),下面實(shí)驗(yàn)一下。
dynamic與反射的性能對(duì)比
這里首先新建一個(gè)類和一個(gè)兩數(shù)相加的方法,然后分別使用反射和dynamic來調(diào)用這個(gè)類的方法,并循環(huán)數(shù)次,來對(duì)比它們的性能。代碼如下:
?#region?反射和dynamic的對(duì)比 int times = 1000000; DynamicTest reflectTest = new DynamicTest(); var addMethod = typeof(DynamicTest).GetMethod("Add"); Stopwatch watchl = Stopwatch.StartNew(); for (var i = 0;i< times; i++) { addMethod.Invoke(reflectTest, new object[] { 1, 2 }); } Console.WriteLine($"反射耗時(shí):{watchl.ElapsedMilliseconds}毫秒"); dynamic dynamicTest = new DynamicTest(); Stopwatch watch2 = Stopwatch.StartNew(); for (int i =0;i< times; i++) dynamicTest.Add(1,2); ?Console.WriteLine($"dynamic耗時(shí):{watch2.ElapsedMilliseconds}?毫秒"); #endregion ?//測(cè)試的類 public?class?DynamicTest { public string Name{get; set; } public int Add(int a, int b) { return a + b; } } //關(guān)注公眾號(hào):Java技術(shù)迷,領(lǐng)取java相關(guān)書籍
100萬次的效果:
1萬次的效果:
可見100萬次循環(huán)的效果dynamic要好點(diǎn),1萬次反射耗時(shí)小于dynamic。為了效果,所以每一次實(shí)驗(yàn)運(yùn)行兩次。
結(jié)語
由上可以看出dynamic的確可以簡(jiǎn)化反射,讓代碼更加簡(jiǎn)潔,可讀性更強(qiáng)。但是從對(duì)比來看,dynamic在低數(shù)量調(diào)用的使用上性能要比反射弱太多,比較大的數(shù)量調(diào)用來說它們不相上下。建議如果你的代碼對(duì)性能要求不太高的情況下,可以使用dynamic來簡(jiǎn)化反射。
到此這篇關(guān)于C#用dynamic一行代碼實(shí)現(xiàn)反射操作的文章就介紹到這了,更多相關(guān)C#用dynamic反射內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C#中圖片.BYTE[]和base64string的轉(zhuǎn)換方法
下面小編就為大家?guī)硪黄狢#中圖片.BYTE[]和base64string的轉(zhuǎn)換方法。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-02-02C#構(gòu)造函數(shù)在基類和父類中的執(zhí)行順序
這篇文章介紹了C#構(gòu)造函數(shù)在基類和父類中的執(zhí)行順序,文中通過示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-04-04C#對(duì)Word文檔的創(chuàng)建、插入表格、設(shè)置樣式等操作實(shí)例
今天小編就為大家分享一篇C#對(duì)Word文檔的創(chuàng)建、插入表格、設(shè)置樣式等操作實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2018-05-05