Comment faire pour vérifier si un objet a certaine méthode/propriété?
À l'aide de modèle dynamique peut-être? Vous pouvez appeler n'importe quelle méthode/propriété en utilisant le mot-clé dynamic, droit? Comment faire pour vérifier si la méthode existe avant d'appeler myDynamicObject.DoStuff(), par exemple?
- Quel est le type de myDynamicObject? C'est une classe dérivée de
DynamicObject
? - quelque chose déclarée avec le mot-clé dynamic
Vous devez vous connecter pour publier un commentaire.
Vous pouvez écrire quelque chose comme ça :
Edit : vous pouvez même faire une extension de la méthode et de l'utiliser comme ceci
System.__COMObject
s pour moi; pour moi, la solution est de supprimer lethis
et d'utiliser la méthode sans le sucre.par la Réflexion
Similaire pour les méthodes
GetType()
il y a la méthode commeGetProperties()
. Il est de retour tableau dePropertyInfo
. Mais comment puis-je utiliserGetProperties()
méthode?C'est une vieille question, mais je viens de tomber sur elle.
Type.GetMethod(string name)
va jeter un AmbiguousMatchException si il n'y a plus d'une méthode de même nom, nous avons donc de mieux gérer ce casNe 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é).
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 ça.
Cela est utile pour COM interop scénarios, par exemple. (vérifier cette 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.