108 votes

Vérifiez si 'T' hérite ou implémente une classe/interface.

Existe-t-il un moyen de tester si T hérite/implémente une classe/interface ?

private void MyGenericClass<T> ()
{
    if(T ... inherits or implements some class/interface
}

2voto

Chalky Points 128

Je crois que la syntaxe est : typeof(Employee).IsAssignableFrom(typeof(T));

0voto

Jed Points 13

Bien que IsAssignableFrom soit le meilleur moyen comme d'autres l'ont indiqué, si vous avez seulement besoin de vérifier si une classe hérite d'une autre, typeof(T).BaseType == typeof(SomeClass) fait aussi l'affaire.

0voto

Suncat2000 Points 652

D'autres moyens de savoir si un objet o hérite d'une classe ou implémente une interface est d'utiliser la fonction is y as opérateurs.

Si vous souhaitez uniquement savoir si un objet hérite d'une classe ou implémente une interface, la fonction is retournera un résultat booléen :

bool isCompatibleType = (o is BaseType || o is IInterface);

Si vous souhaitez utiliser la classe héritée ou l'interface implémentée après votre test, la fonction as L'opérateur effectuera un cast sûr, renvoyant une référence à la classe héritée ou à l'interface implémentée si elle est compatible ou nulle si elle ne l'est pas :

BaseType b = o as BaseType; // Null if d does not inherit from BaseType.

IInterface i = o as IInterface; // Null if d does not implement IInterface.

Si vous avez seulement le type T puis utilisez la réponse de @nikeee.

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