Comment déterminez-vous si un Type donné (System.Type) hérite d'une classe de base spécifique (en .Net)?

StackOverflow https://stackoverflow.com/questions/129277

Question

Cela va probablement être une réponse facile et il me manque quelque chose, mais voilà ... Si j'ai un Type (c'est-à-dire un System.Type réel ... pas une instance), comment faire Je dis si elle hérite d'un autre type de base spécifique?

Était-ce utile?

La solution

Utilisez la méthode IsSubclassOf du classe System.Type .

Autres conseils

Une chose à clarifier entre Type.IsSubTypeOf () et Type.IsAssignableFrom () :

  • IsSubType () renverra true uniquement si le type donné est dérivé de le type spécifié. Il renverra false si le type donné IS le type spécifié.

  • IsAssignableFrom () renverra true si le type donné est le type type spécifié ou dérivé du type spécifié.

Donc, si vous utilisez ces éléments pour comparer BaseClass et DerivedClass (qui hérite de BaseClass ), alors:

BaseClassInstance.GetType.IsSubTypeOf(GetType(BaseClass)) = FALSE
BaseClassInstance.GetType.IsAssignableFrom(GetType(BaseClass)) = TRUE

DerivedClassInstance.GetType.IsSubTypeOf(GetType(BaseClass)) = TRUE
DerivedClassInstance.GetType.IsAssignableFrom(GetType(BaseClass)) = TRUE

EDIT: Notez que la solution ci-dessus échouera si le type de base que vous recherchez est une interface. La solution suivante fonctionnera pour tout type d'héritage, que ce soit une classe ou une interface.

// Returns true if "type" inherits from "baseType"
public static bool Inherits(Type type, Type baseType) {
    return baseType.IsAssignableFrom(type)
}

(Semi) Extrait utile du MSDN . article:

true si [l'argument] et le Type en cours représentent le même type, ou si le Type en cours se trouve dans la hiérarchie d'héritage de [l'argument], ou si le Type en cours est une interface que [l'argument] implémente, ou if [l'argument] est un paramètre de type générique et le type en cours représente l'une des contraintes de [l'argument]. false si aucune de ces conditions n'est vraie ou si [l'argument] est une référence null (Nothing en Visual Basic).

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top