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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

建议15: 使用dynamic来简化反射实现

發布時間:2024/9/5 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 建议15: 使用dynamic来简化反射实现 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
建議15: 使用dynamic來簡化反射實現dynamic是Framework 4.0的新特性。dynamic的出現讓C#具有了弱語言類型的特性。編譯器在編譯的時候不再對類型進行檢查,編譯器默認dynamic對象支持開發者想要的任何特性。比如,即使你對GetDynamicObject方法返回的對象一無所知,也可以像如下這樣進行代碼的調用,編譯器不會報錯:dynamic dynamicObject = GetDynamicObject(); Console.WriteLine(dynamicObject.Name); Console.WriteLine(dynamicObject.SampleMethod()); 當然,如果運行時dynamicObject不包含指定的這些特性(如上文中帶返回值的方法SampleMethod),運行時程序會拋出一個RuntimeBinderException異常:“System.Dynamic.ExpandoObject”未包含“SampleMethod”的定義。注意 有人會將var這個關鍵字與dynamic進行比較。實際上,var和dynamic完全是兩個概念,根本不應該放在一起比較。var實際上是編譯期拋給我們的“語法糖”,一旦被編譯,編譯期會自動匹配var 變量的實際類型,并用實際類型來替換該變量的聲明,這看上去就好像我們在編碼的時候是用實際類型進行聲明的。而dynamic被編譯后,實際是一個object類型,只不過編譯器會對dynamic類型進行特殊處理,讓它在編譯期間不進行任何的類型檢查,而是將類型檢查放到了運行期。這從Visual Studio的編輯器窗口就能看出來。以var聲明的變量支持“智能感知”,因為Visual Studio能推斷出var類型的實際類型;而以dynamic聲明的變量卻不支持“智能感知”,因為編譯器對其運行期的類型一無所知。對dynamic變量使用“智能感知”,會提示“此操作將在運行時解析”。利用dynamic的這個特性,可以簡化C#中的反射語法。在dynamic出現之前,假設存在類,代碼如下所示:public class DynamicSample { public string Name { get; set; } public int Add(int a, int b) { return a + b; } } 我們這樣使用反射,調用方代碼如下所示:DynamicSample dynamicSample = new DynamicSample(); var addMethod = typeof(DynamicSample).GetMethod("Add"); int re = (int)addMethod.Invoke(dynamicSample, new object[] { 1, 2 }); 在使用dynamic后,代碼看上去更簡潔了,并且在可控的范圍內減少了一次拆箱的機會,代碼如下所示: dynamic dynamicSample2 = new DynamicSample(); int re2 = dynamicSample2.Add(1, 2); 我們可能會對這樣的簡化不以為然,畢竟代碼看起來并沒有減少多少,但是,如果考慮到效率兼優美兩個特性,那么dynamic的優勢就顯現出來了。如果對上面的代碼執行1000000次,如下所示: int times = 1000000; DynamicSample reflectSample = new DynamicSample(); var addMethod = typeof(DynamicSample).GetMethod("Add"); Stopwatch watch1 = Stopwatch.StartNew(); for (var i = 0; i < times; i++) { addMethod.Invoke(reflectSample, new object[] { 1, 2 }); } Console.WriteLine(string.Format("反射耗時:{0} 毫秒", watch1.ElapsedMilliseconds)); dynamic dynamicSample = new DynamicSample(); Stopwatch watch2 = Stopwatch.StartNew(); for (int i = 0; i < times; i++) { dynamicSample.Add(1, 2); } Console.WriteLine(string.Format("dynamic耗時:{0} 毫秒", watch2.ElapsedMilliseconds)); 輸出為: 反射耗時:2575 毫秒 dynamic耗時:76 毫秒 可以看到,沒有優化的反射實現,上面這個循環上的執行效率大大低于dynamic實現的效果。如果對反射實現進行優化,代碼如下所示: DynamicSample reflectSampleBetter = new DynamicSample(); var addMethod2 = typeof(DynamicSample).GetMethod("Add"); var delg = (Func<DynamicSample, int, int, int>)Delegate.CreateDelegate(typeof( Func<DynamicSample, int, int, int>), addMethod2); Stopwatch watch3 = Stopwatch.StartNew(); for (var i = 0; i < times; i++) { delg(reflectSampleBetter, 1, 2); } Console.WriteLine(string.Format("優化的反射耗時:{0} 毫秒", watch3.ElapsedMilliseconds)); 輸出為: 優化的反射耗時:12 毫秒 可以看到,優化后的反射實現,其效率和dynamic在一個數量級上。可是它帶來了效率,卻犧牲了代碼的整潔度,這種實現在我看來是得不償失的。所以,現在有了dynamic類型,建議大家:始終使用dynamic來簡化反射實現。

?

轉載于:https://www.cnblogs.com/xust/articles/3081397.html

與50位技術專家面對面20年技術見證,附贈技術全景圖

總結

以上是生活随笔為你收集整理的建议15: 使用dynamic来简化反射实现的全部內容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 亚洲成人基地 | 欧美一级做性受免费大片免费 | 91精品国产高潮对白 | 日韩欧美在线免费观看 | 欧美乱码视频 | 偷拍自拍一区 | 黄色日比视频 | 九九精品国产 | 最近中文字幕免费视频 | 涩涩视频软件 | 香蕉一区二区 | 暖暖日本在线 | 欧美亚洲色综久久精品国产 | 男女高潮网站 | 亚洲aaaaaaa | 欧美性受xxxx狂喷水 | 青少年xxxxx性开放hg | 美女一区二区视频 | 免费观看亚洲 | 欧美精品乱人伦久久久久久 | 日韩深夜福利 | 三年大全国语中文版免费播放 | 狠狠做深爱婷婷综合一区 | 国内一区二区视频 | 人人看人人看 | 欧美一级免费大片 | 亚洲黄色免费电影 | 国产精品视频h | 亚洲一区二区自拍偷拍 | 成人在线激情视频 | 黄色一级小说 | 日韩影院一区 | 欧美成人手机视频 | 久久久av电影 | 国产精品天美传媒 | 毛片大全免费看 | 性色av一区二区三区免费 | 亚洲影音| 成人午夜影院在线观看 | 日本免费色 | 老师的肉丝玉足夹茎 | 国产嫩草影院久久久久 | 亚洲黄色一区二区 | 豆花av在线| 一区二区三区www污污污网站 | 日韩视频国产 | 中文字幕女同女同女同 | 国产欧美一区二区精品性色99 | 五十路av在线 | 国产精品久久久久久久久久直播 | 欧美又粗又长又爽做受 | 天天干天天天 | 男生操女生在线观看 | 香蕉视频91 | 国产伦理久久精品久久久久 | 亚洲天堂av电影 | 超薄肉色丝袜一二三 | 激情另类视频 | 亚洲高清中文字幕 | 亚洲av无码一区二区二三区软件 | 青草草在线 | 黄色午夜 | 亚洲成人黄色在线 | 亚洲午夜在线播放 | √资源天堂中文在线 | 日本女人一级片 | 国产精品一品二区三区的使用体验 | 一区二区有码 | 欧美国产精品一区二区 | 蜜桃av色偷偷av老熟女 | 五月天久久 | 黄色免费在线观看网站 | 白丝女仆被免费网站 | 欧美在线免费观看视频 | 免费看黄在线网站 | 国产视频一级 | 在线看片你懂的 | 99riAv国产精品无码鲁大师 | 91视频免费观看网站 | 国产亚洲精品自拍 | 午夜做爰xxxⅹ性高湖视频美国 | 欧美视频一区二区三区四区在线观看 | 日韩欧美网 | 手机av免费在线观看 | 国产黄色小视频在线观看 | 国产美女无遮挡永久免费观看 | 欧美日日操 | 日日摸日日干 | 91精品国产高清一区二区三蜜臀 | av天天有 | 欧美激情免费视频 | 午夜黄色网址 | 91丨porny丨 | 久久超碰av | 成人久久久精品国产乱码一区二区 | 中文字幕视频网站 | 日本在线有码 | 国产精品久久久久久久天堂 | 亚洲精品一二三区 |