2010-05-21 35 views
3

有沒有一種方法可以告訴對象是否分配了類型,是動態類型?在動態類型上反映它是否是動態類型,開始於

例如:

dynamic foo = GetCat(); 

Console.WriteLine((foo is Cat).ToString()); // will print True because 
// at the execution time, foo will have assumed the Cat type. However, is 
// there a mechanism by which I can reflect on foo and say, "This guy was assigned 
// a dynamic type, to begin with."? 
+0

我認爲這是不可能的,但由於我不完全確定,我只是拭目以待,看看有什麼答案進來:); – Lucero 2010-05-21 16:24:44

+0

出於好奇,你爲什麼想知道? – 2010-05-21 17:09:55

+0

嗨,Eric,我以爲你的評論是針對Lucero的。但我現在懷疑這是針對我原來的問題。我已經在您的官方電子郵件地址發送了一封私人電子郵件,附有您的問題的答案。 – 2010-05-22 21:57:05

回答

3

有沒有一種方式,可以告訴我們,如果一個對象被分配到的類型是一個動態的類型?

不,如果foo是局部變量,則不行。

「動態」是一個編譯時功能。這只是編譯器的一個暗示,意思是「不用在編譯時嘗試在此表達式上進行類型分析,而是生成在運行時調用特殊版本編譯器的代碼」。

在運行時,局部變量foo只是一個局部變量的類型對象,而局部變量的內容是對一個Cat的引用。編譯器知道代碼的作者希望避免在編譯時對foo進行類型分析的事實已經丟失。

通過檢查使用反射的方法的編譯器生成的屬性,可能找出返回對象的方法實際上是否返回動態。

+0

非常感謝,Eric。非常感謝。 – 2010-05-21 16:30:42

+0

返回動態類型的方法的屬性是什麼?我在動態類型的字段或屬性上看到「DynamicAttribute」,但是當我反思它時(至少在我的測試用例中),這個屬性不會出現在返回'dynamic'的方法上? – 2011-12-09 00:10:43

+0

這不工作的方法的一個例子是在這裏:http://stackoverflow.com/questions/8439786/how-do-you-determine-if-a-method-returns-a-dynamic-type-when-using-反射 – 2011-12-09 00:55:31