185 votes

Comment vérifier si un objet possède certaine méthode/propriété ?

L’utilisation du modèle dynamique peut-être ? Vous pouvez appeler toute méthode/propriété à l’aide du mot clé dynamic, droite ? Comment vérifier si la méthode existe avant d’appeler myDynamicObject.DoStuff(), par exemple ?

258voto

Julien Points 5966

Vous pourriez écrire quelque chose comme ça :

Edit : vous pouvez même faire une méthode d’extension et utilisez-le comme ceci

108voto

Stecya Points 12073

par réflexion

Similar est pour les méthodes

55voto

esskar Points 3492

Je sais à est une vieille question, mais je suis juste tombé sur elle. ``lève AmbiguousMatchException si il n’y a plus d’une méthode portant ce nom, afin que nous mieux traiter cette affaire

23voto

Frederik Gheysels Points 36354

Ne serait-il pas préférable de ne pas utiliser tous les types de dynamiques pour cela, et laissez votre classe implémente une interface. Ensuite, vous pouvez vérifier au moment de l'exécution si un objet implémente cette interface, et donc, a l'attendu de la méthode (ou la propriété).

public interface IMyInterface
{
   void Somemethod();
}


IMyInterface x = anyObject as IMyInterface;
if( x != null )
{
   x.Somemethod();
}

Je pense que c'est la seule façon correcte.

La chose que vous faites allusion à l'est de duck-typing, qui est utile dans le cas où vous savez déjà que l'objet a de la méthode, mais le compilateur ne peut pas contrôler. Cela est utile pour COM interop scénarios, par exemple. (consultez cet article)

Si vous souhaitez les combiner en tapant duck, de réflexion, par exemple, alors je pense que vous êtes absent le but de canard-typage.

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