131 votes

Comment vérifier si une classe hérite d'une autre classe sans l'instancier ?

Supposons que j'ai une classe qui ressemble à ceci :

class Derived : // some inheritance stuff here
{
}

Je veux vérifier quelque chose comme ceci dans mon code :

Derived is SomeType;

Mais on dirait que is L'opérateur a besoin que Derived soit une variable de type Dervied, pas Derived lui-même. Je ne veux pas créer un objet de type Derived.
Comment puis-je m'assurer que Derived hérite SomeType sans l'instancier ?

P.S. Si ça peut aider, je veux quelque chose comme where Le mot-clé fait avec les génériques.
EDITAR:
Similaire à ce réponse, mais il s'agit de vérifier un objet. Je veux vérifier la classe elle-même.

266voto

Ani Points 59747

Pour vérifier l'assignabilité, vous pouvez utiliser la fonction Type.IsAssignableFrom méthode :

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

Cela fonctionnera comme prévu pour l'égalité des types, les relations d'héritage et les implémentations d'interfaces, mais no lorsque vous recherchez l'"assignabilité" entre les opérateurs de conversion explicite/implicite.

Pour vérifier l'héritage strict, vous pouvez utiliser Type.IsSubclassOf :

typeof(Derived).IsSubclassOf(typeof(SomeType))

19voto

Haris Hasan Points 17497

Essayez ceci

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

Cela vous permettra de savoir si BarClass(Derived) met en œuvre IFoo(SomeType) ou non

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X