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.
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))
Essaye ça
typeof(IFoo).IsAssignableFrom(typeof(BarClass));
Cela vous dira si BarClass(Derived)
implémente IFoo(SomeType)
ou non