簡體   English   中英

如何確定給定的Type(System.Type)是否繼承自特定的基類(在.Net中)?

[英]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

因此,如果您使用它們來比較BaseClassDerivedClass (繼承自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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM