2012-01-02 35 views
95

假設我有一個類,看起來像這樣:如何檢查一個類是否繼承另一個類而不實例化它?

class Derived : // some inheritance stuff here 
{ 
} 

我想看看這樣的事情在我的代碼:

Derived is SomeType; 

不過貌似is運營商需要推導爲變量類型的Dervied ,而不是派生自己。 我不想創建Derived類型的對象。
我如何確保Derived繼承SomeType而不實例化它?

P.S.如果有幫助,我想要類似where關鍵字與泛型。
編輯:
類似this答案,但它檢查的對象。我想檢查課程本身。

回答

207

要檢查可轉讓性,你可以使用Type.IsAssignableFrom方法:

typeof(SomeType).IsAssignableFrom(typeof(Derived)) 

這將作爲你期望的類型相等,繼承關係和接口實現,但不是當您在顯式/隱式轉換運算符中查找「可分配性」時。

要檢查是否有嚴格的繼承,你可以使用Type.IsSubclassOf

typeof(Derived).IsSubclassOf(typeof(SomeType)) 
+1

就像一張紙條給任何人想知道,對泛型類型/接口定義檢查時,這將不會返回true,據我可以告訴你需要搜索繼承鏈並自己檢查泛型類型定義。 – 2015-09-23 00:59:15

+0

亞歷克斯,你將如何去尋找一個泛型的繼承鏈來完成這個? – 2015-11-12 11:07:51

+0

@ AlexHopeO'Connor的說明很重要,我認爲解決方案是有的http://stackoverflow.com/questions/457676/check-if-a-class-is-derived-from-a-generic-class – 2016-05-25 11:49:35

18

試試這個

typeof(IFoo).IsAssignableFrom(typeof(BarClass)); 

這會告訴你BarClass(Derived)是否實現IFoo(SomeType)與否

相關問題