日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

C# Dynamic特性

發(fā)布時間:2025/6/17 79 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C# Dynamic特性 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

?

C# 4.0 dynamic:聲明動態(tài)對象

dynamic關(guān)鍵字用于聲明一個動態(tài)對象,然后通過該動態(tài)對象去調(diào)用方法或讀寫屬性。這是C#4.0 添加的特性。官方解釋:dynamic類型是幫助我們繞過編譯進(jìn)行類型檢查,相反這些操作是在運(yùn)行時處理。

兩個缺點

新功能有兩個缺點:1)VS不會只能提示,只用依靠你自己了,因為鬼才知道你引用的未知對象中有哪些操作方法,只有運(yùn)行時Running才可以知道。2)運(yùn)行時間變慢,反射的封裝(自動反射),反射的效率不高。

應(yīng)用場景

在使用C# 2.0或3.0的時候,如果一個對象需要在運(yùn)行時才能確定,并且沒有接口和基類方面的信息,那我們一般使用反射技術(shù)來調(diào)用這個未知對像的方法或?qū)傩?#xff0c;而C# 4.0提供的dynamic可以幫我們簡化這些工作。假設(shè)我們的程序會在運(yùn)行時取得一個不確定類型的對象,但這個對象一定會有個Print()方法,我們需要調(diào)用這個方法打印出一些信息,那么在C# 4.0下面,我們可以用下面的兩句代碼來實現(xiàn)這個需求。

dynamic unknowObj = GetDymanicObject();

unknowObj.Print();

這種解決方式比起用反射調(diào)用Print方法,應(yīng)該簡潔很多吧?程序員要做的就是別把方法名Print()打錯,VS2010是不會為dynamic對象提供智能提示的,因為VS不知道運(yùn)行時這個unknowObj會是什么。

到這里,應(yīng)該有不少的朋友可以從這個例子上看出,當(dāng)程序編譯到unknowObj.Print()的時候,VS會幫我們生成反射的代碼,用反射的方式去調(diào)用Print這個方法,實質(zhì)上就是幫我們自動反射了。

如果能理解這一點,那也就不難理解C#為啥要搞dynamic這個既沒智能感知,運(yùn)行又慢的怪物出來了。

按New features in CSharp 4的說法,dymanic主要應(yīng)用于下面的場景:

1、自動反射

2、COM組件互操作

3、混合編程,例如IronRuby和IronPython

4、處理Html DOM對象

如果有處理過上面這些工作的朋友們,應(yīng)該不難理解了吧。

具體的內(nèi)容,還請大伙自己看看New features in CSharp 4,里面說得比較詳細(xì)。

以上就介紹了C# 4.0 dynamic的用途。

舉例子演示

下面演示幾個例子進(jìn)一步說明這個關(guān)鍵字的使用,以及實用的主意事項。

1)簡單演示一個獲得變量值的例子。

1 class Program 2 { 3 static void Main(string[] args) 4 { 5 dynamic dyn = 1; 6 object obj = 1; 7 8 // Rest the mouse pointer over dyn and obj to see their 9 // types at compile time. 10 System.Console.WriteLine(dyn.GetType()); 11 System.Console.WriteLine(obj.GetType()); 12 } 13 } View Code

2)演示一個簡單獲取程序集對象的例子(使用Shell32下的ShellClass.Application獲得文件屬性)

1 //獲得程序的對象(通過程序的ProgramID) 2 System.Type objType = System.Type.GetTypeFromProgID("Shell.Application"); 3 //根據(jù)獲得的ProgramID對象程序集創(chuàng)建一個對象 4 dynamic shell = System.Activator.CreateInstance(objType); 5 //文件路徑 6 dynamic folder = shell.NameSpace(path.Substring(0, path.LastIndexOf("\\"))); 7 //文件名稱 8 dynamic folderitem = folder.ParseName(path.Substring(path.LastIndexOf("\\") + 1)); 9 if (Environment.OSVersion.Version.Major >= 6) 10 { 11 return folder.GetDetailsOf(folderitem, 27); 12 } 13 else 14 { 15 return folder.GetDetailsOf(folderitem, 21); 16 } 17 View Code

?

轉(zhuǎn)載于:https://www.cnblogs.com/sunBolg/p/3457717.html

總結(jié)

以上是生活随笔為你收集整理的C# Dynamic特性的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。