web-dev-qa-db-fra.com

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 ça dans mon code:

Derived is SomeType;

Mais ressemble à l'opérateur is. Il faut que Derived soit une variable de type Dervied, et non pas Derived. Je ne veux pas créer un objet de type dérivé.
Comment puis-je m'assurer que Derived hérite de SomeType sans l'instancier?

P.S. Si cela peut aider, je veux quelque chose comme ce que fait le mot-clé where avec les génériques.
EDIT:
Similaire à this , mais vérifie un objet. Je veux vérifier la classe elle-même.

122
atoMerz

Pour vérifier l’assignabilité, vous pouvez utiliser le Type.IsAssignableFrom méthode:

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

Cela fonctionnera comme prévu pour l'égalité de type, les relations d'héritage et les implémentations d'interface, mais pas lorsque vous recherchez une 'affectabilité' entre explicite/implicite opérateurs de conversion.

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

typeof(Derived).IsSubclassOf(typeof(SomeType))
256
Ani

Essaye ça

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

Cela vous dira si BarClass(Derived) implémente IFoo(SomeType) ou non

19
Haris Hasan