2011-04-08 128 views
0

我有一個類Derived<T>,它是從Base<T>派生的。以下哪個斷言是正確的還是錯誤的?關於泛型和繼承的問題

typeof(Derived<SomeType>).IsSubclassOf(typeof(Base<SomeType>)) 
typeof(Derived<>)  .IsSubclassOf(typeof(Base<SomeType>)) 
typeof(Derived<SomeType>).IsSubclassOf(typeof(Base<>)) 
typeof(Derived<>)  .IsSubclassOf(typeof(Base<>)) 

在此先感謝

+0

聽起來像這樣應該被標記作業 – 2011-04-08 02:43:28

+0

@Chris:不。這不是家庭作業。我甚至不是學生。我錯過了C++的簡單性,其中模板不是什麼複雜的(而且有點令人費解的)宏。 (但是,然後,您無法測試任何有關模板的內容,因爲它們在運行時不存在。):S – pyon 2011-04-08 02:44:16

+0

爲什麼不運行代碼? – Linkgoron 2011-04-08 02:50:04

回答

0

在這種情況下,第一個:

typeof(Derived<SomeType>).IsSubclassOf(typeof(Base<SomeType>)) 

其他的不要你編譯期不能指一般沒有它的類型參數,例如

Something<> 
+0

@Chris Slain:錯! 'typeof(Derived <>)'是有效的代碼。事實上,我正在編寫一個**巨大的元編程框架,它能夠在運行時引用泛型。更多信息:http://msdn.microsoft.com/en-us/library/58918ffs.aspx – pyon 2011-04-08 02:47:47

+0

我站在更正 - 你可以編譯。但答案仍然是#1。 – 2011-04-08 02:51:45

+0

@Chris Shain:對不起,我錯誤地輸入了(實際上是小姐)你的名字。 – pyon 2011-04-08 02:53:54