18
A
回答
26
編譯器將一個變量輸入爲object
,編譯器將驗證所有實例成員的有效性。另一個變量的類型爲dynamic
,編譯器將忽略所有實例成員,並在執行時由DLR調用。
它與性能或內存分配無關。 dynamic
類型是編譯器有些忽略的靜態類型。它使您能夠以靜態類型語言使用duck typing,這種語言提供了很大的靈活性(尤其是在處理用動態語言編寫的組件時)。
我肯定會建議您在以下主題閱讀起來:
17
object
適用於所有.NET版本。
它是所有其他類型繼承的基本類型,因此任何類型都可以轉換爲object
。
不能動態地添加和聲明爲object
變量改變任何東西。
聲明是一個靜態類型,由編譯器檢查。
dynamic
是.NET 4.0的新增功能。
它允許你動態地添加和更改屬性和方法,而不需要編譯器檢查他們(因此,如果你寫的是錯的,你只會在運行時發現)。
在內存分配方面 - 沒有太大區別。兩者都是引用類型,分配給它的任何對象都已經分配了內存來存儲它。
在性能有關的,因爲DLR獲取與dynamic
參與,會有一些開銷。你需要測試並看看。
至於其他福利 - dynamic
與動態對象/數據處理時,例如XML文件,真正與可讀性幫助。它也有助於以類似的方式進行反思。
當然,如果你想擁有動態物體,你不能使用object
和有使用dynamic
。
0
動態關鍵字還增加了一些開銷到你的執行時間,由於使用的所有額外的邏輯 - 所以,如果你不需要動態運行時或互操作,並可以使用對象代碼的效率會更高脫身。
的動態關鍵字的更多信息可以在傑夫·裏希特的書中找到:CLR via C#, 3rd Edition
山姆外邦人做了幾個關於細節的帖子太:
相關問題
- 1. 動態VS的方法params對象關鍵字,返回類型
- 2. 泛型類型vs動態與對象
- 3. 如何在字典對象中使用動態數據類型
- 4. 關於面向對象編程的抽象數據類型vs數據類型與數據結構
- 5. 數據存儲對象關鍵字段
- 6. 動態與對象類型
- 7. 使用params關鍵字與動態類型參數
- 8. 類型關鍵字
- 9. SML - 遞歸數據類型VS多態數據類型
- 10. 關於JavaScript數據類型和對象類型的困惑
- 11. 使用關鍵字和動態類名
- 12. 淨字典哈希對象類型鍵
- 13. 對於動態關鍵字沒有intellisense?
- 14. 類型錯誤:模型庫對象得到了關鍵字參數
- 15. C#對象的類型VS對象類型
- 16. 將靜態類型的對象展開爲動態對象
- 17. 差Vs不使用抽象關鍵字
- 18. Java對象:動態類型不可見
- 19. 什麼是動態類型的對象
- 20. 傳遞對象類型動態
- 21. 如何動態分配對象類型?
- 22. 陣列的動態類型的對象
- 23. Java /返回動態對象類型
- 24. 動態平等類型的對象
- 25. PropertyGrid和動態類型的對象
- 26. 數據結構 - 抽象數據類型(ADT)VS具體數據類型(CDT)
- 27. Python:如何檢查對象的鍵值對的數據類型?
- 28. Haskell的類型關鍵字
- 29. 「this」關鍵字的類型?
- 30. 的Javascript靜態VS情況下,原型關鍵字
感謝您的評論 – 2012-12-04 08:35:37