什麼是動態關鍵字的實際動手用法?
dynamic a = 1;
a.Crash();
我知道在XML鏈中它更具可讀性的情況,但除此之外,它有什麼好處?
什麼是動態關鍵字的實際動手用法?
dynamic a = 1;
a.Crash();
我知道在XML鏈中它更具可讀性的情況,但除此之外,它有什麼好處?
這裏的好文章:
作爲開發人員,您使用動態 關鍵字預計將 變量包含這樣 爲對象從COM或DOM API 返回不確定類型的對象;從動態語言 (例如IronRuby)獲得;來自 的反思;從構建的對象 動態在C#4.0中使用新的 擴展功能。
+1。好文章。特別是關於'var vs. dynamic',因爲很多人認爲他們是一樣的。 – 2011-06-14 17:02:47
DLR(動態語言運行時)基本上使每個人都可以與每個人交談。這不僅包括Python和Ruby,還包括Silverlight,Office/COM等。
這也是一個很好的閱讀http://www.hanselman.com/blog/C4AndTheDynamicKeywordWhirlwindTourAroundNET4AndVisualStudio2010Beta1.aspx – BentOnCoding 2011-06-14 17:00:50
C#'dynamic' keyword!= DLR。 – delnan 2011-06-14 17:01:23
克里斯提到它在COM互操作場景中非常有用。
另外,它對asp.net-mvc-3非常有用。您可以通過動態模型獲得視圖。你也有ViewBag
對象,可以容納任何東西。
另一個用途是舉行json
object, if you implement a DynamicObject
class。在使用API時,這是非常有用。
我一直在MVC視圖模型使用的動態頗爲失望。它非常容易受傷。你不能傳遞到動態擴展方法,這意味着你需要將其轉換爲已知類型的方法的HtmlHelper使用,並且當它們被編譯爲內部不能傳遞匿名類型爲動態視圖。這是聽起來不錯的東西之一 - 但實際上並非如此。 – 2011-06-14 17:09:11
@詹姆斯測試一個匿名對象和真的不起作用。我記得另一個用於動態的應用,並補充說。 – BrunoLM 2011-06-14 17:19:54
我發現最實際的用途是處理COM互操作場景。許多傳統COM組件最終生成的簽名無法通過託管代碼進行大量投射,原因是許多項目被編組爲object
。它導致如下代碼。
IUser GetAUser() { ... }
IUser user = GetAUser();
IAddress address = (IAddress)user.GetAddress();
int zipCode = (int)address.GetZipCode();
對於深層嵌套的層次結構,情況會變得更糟。雖然這段代碼是類型安全的,但它並沒有違反任何CLR規則,但它是不安全的,因爲開發人員依賴於類型的實現細節來完成工作。它並不比動態等價物更安全。
dynamic GetAUser() { ... }
int zipCode = (int)GetAUser().GetAddress().GetZipCode();
不示例代碼動態版本違反「兩點」禁止寫入COM-互操作代碼(即生成的代碼「隱藏」的RCW)? – 2013-09-03 21:09:35
當您有幾個方法重載並且您已將該參數作爲對象接收時,對POCO使用dynamic關鍵字可能非常有用。將參數強制轉換爲動態參數,它將根據運行時類型解析正確的重載 - 沒有動態的情況下最終會產生一系列if/elseif語句,yuck。
使用與DynamicObjects子類的動態關鍵字可以讓你擺脫鍋爐板,更容易寫出流暢的API和創建代碼,是迄今爲止更具延展性。例如,這裏是一個動態api,擺脫了與MVVM綁定有關的大量樣板代碼http://code.google.com/p/impromptu-interface/wiki/UsageMVVM
http://msdn.microsoft.com/en-us/library/dd264736.aspx – 2011-06-14 16:58:38