[英]How do you determine whether or not a given Type (System.Type) inherits from a specific base class (in .Net)?
這可能是一個簡單的答案,我只是遺漏了一些東西,但是這里...如果我有一個Type,(即一個實際的System.Type ......不是一個實例)我該如何判斷它繼承自另一個特定的基類型?
使用System.Type類的IsSubclassOf方法。
在Type.IsSubTypeOf()
和Type.IsAssignableFrom()
之間澄清一件事:
僅當給定類型是從指定類型派生時, IsSubType()
才會返回true
。 如果給定類型是指定類型,它將返回false
。
如果給定類型是指定類型或從指定類型派生,則IsAssignableFrom()
將返回true
。
因此,如果您使用它們來比較BaseClass
和DerivedClass
(繼承自BaseClass
),那么:
BaseClassInstance.GetType.IsSubTypeOf(GetType(BaseClass)) = FALSE
BaseClassInstance.GetType.IsAssignableFrom(GetType(BaseClass)) = TRUE
DerivedClassInstance.GetType.IsSubTypeOf(GetType(BaseClass)) = TRUE
DerivedClassInstance.GetType.IsAssignableFrom(GetType(BaseClass)) = TRUE
編輯:請注意,如果您要查找的基本類型是接口,上述解決方案將失敗。 以下解決方案適用於任何類型的繼承,無論是類還是接口。
// Returns true if "type" inherits from "baseType"
public static bool Inherits(Type type, Type baseType) {
return baseType.IsAssignableFrom(type)
}
(半)來自MSDN文章的有用摘錄:
如果[參數]和當前類型表示相同類型,或者當前類型位於[參數]的繼承層次結構中,或者當前類型是[參數]實現的接口,或者如果[ argument]是泛型類型參數,當前Type表示[參數]的約束之一。 如果這些條件都不為真,或者[參數]是空引用(在Visual Basic中為Nothing),則返回false。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.