2011-04-02 49 views

回答

26

編譯器將一個變量輸入爲object,編譯器將驗證所有實例成員的有效性。另一個變量的類型爲dynamic,編譯器將忽略所有實例成員,並在執行時由DLR調用。

它與性能或內存分配無關。 dynamic類型是編譯器有些忽略的靜態類型。它使您能夠以靜態類型語言使用duck typing,這種語言提供了很大的靈活性(尤其是在處理用動態語言編寫的組件時)。

我肯定會建議您在以下主題閱讀起來:

17

object適用於所有.NET版本。

它是所有其他類型繼承的基本類型,因此任何類型都可以轉換爲object

不能動態地添加和聲明爲object變量改變任何東西。

聲明是一個靜態類型,由編譯器檢查。

dynamic是.NET 4.0的新增功能。

它允許你動態地添加和更改屬性和方法,而不需要編譯器檢查他們(因此,如果你寫的是錯的,你只會在運行時發現)。


在內存分配方面 - 沒有太大區別。兩者都是引用類型,分配給它的任何對象都已經分配了內存來存儲它。

在性能有關的,因爲DLR獲取與dynamic參與,會有一些開銷。你需要測試並看看。

至於其他福利 - dynamic與動態對象/數據處理時,例如XML文件,真正與可讀性幫助。它也有助於以類似的方式進行反思。

當然,如果你想擁有動態物體,你不能使用object使用dynamic