25
雖然幾乎完全不相干做的事情,一個問題突然出現在我的腦海:Can obj.GetType()。IsInterface是真的嗎?
能否形式obj.GetType().IsInterface
的表達永遠是由專門的C#代碼代碼庫是真的嗎?
我懷疑答案是否定的,因爲:
GetType()
總是返回運行時類型。- 具體類型的運行時類型與調用的構造函數匹配。因此,它從來不是一個接口,因爲接口沒有構造函數。
- 匿名類型不能實現一個接口(如果他們做到了,他們還是不得不自己匿名類類型)。
- 實現公共接口的其他程序集的內部類的實例仍將具有該類作爲運行時類型。
- Using
[ComImport, CoClass(typeof(MyClass))]
on an interface使它看起來像您可以實例,但構造函數調用實際實例引用的類。
我想不出任何其他情況。我錯過了什麼,或者我的猜測是正確的?
迂迴。我猜這值得兩三個徽章。 :) – Jon 2014-08-30 16:43:03
+1證明它可以完成,但有一些事情最好不教。如果我*永遠*必須修復這樣做的代碼。我會去找你@Jon。只是在開玩笑。 :) – cgTag 2014-08-30 16:49:31
對於COM類,'新ISomeComInterface()'只是一個編譯器的技巧:把它轉換成別的東西,要麼'新SomeComClass()'或'Activator.CreateInstance(Type.GetTypeFromCLSID(SomeComGuid))'。無論哪種方式,運行時永遠不會看到一個接口被創建,所以我不認爲可以用'GetType()'返回一個接口。 – hvd 2014-08-31 10:00:42