387 votes

Tester si un objet implémente l'interface

Quelle est la façon la plus simple de tester si un objet implémente une interface donnée?

Est-il possible de tester si une classe implémente une interface donnée?

621voto

Robert C. Barth Points 9788
if (object is IBlah)

ou

IBlah myTest = originalObject as IBlah

if (myTest != null)

237voto

Andrew Kennan Points 8221

À l'aide de l' is ou as des opérateurs de la bonne façon, si vous connaissez le type d'interface au moment de la compilation et de disposer d'une instance du type de test. Quelque chose que personne d'autre ne semble avoir mentionné est Type.IsAssignableFrom:

if( typeof(IMyInterface).IsAssignableFrom(someOtherType) )
{
}

Je pense que c'est beaucoup plus lisible qu'en regardant à travers le tableau retourné par GetInterfaces et a l'avantage de travailler pour les classes.

25voto

Rauhotz Points 3155

Pour l'exemple:

if (obj is IMyInterface) {}

Pour la classe:

Vérifier si typeof(MyClass).GetInterfaces() contient l'interface.

16voto

famousgarkin Points 3484

Voici une variation sur @Andrew Kennan réponse que j'ai utilisé récemment. J'avais besoin de ce test pour les types obtenus lors de l'exécution.

if (serviceType.IsInstanceOfType(service))
{
    // 'service' does implement the 'serviceType' type
}

2voto

Bit Destroyer Points 1226

En outre, le test en utilisant le "est" de l'opérateur, vous pouvez décorer vos méthodes pour vous assurer que les variables passées à mettre en place une interface particulière, comme suit:

public static void BubbleSort<T>(ref IList<T> unsorted_list) where T : IComparable
{
     //Some bubbly sorting
}

Je ne suis pas sûr de la version de .Net cela a été mis en œuvre de sorte qu'il peut ne pas fonctionner dans votre version.

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