Vous utilisez peut-être un modèle dynamique? Vous pouvez appeler n'importe quelle méthode / propriété en utilisant le mot-clé dynamic, non? Comment vérifier si la méthode existe avant d'appeler myDynamicObject.DoStuff (), par exemple?
c#
.net
methods
reflection
properties
Louis Rhys
la source
la source
DynamicObject
?Réponses:
Vous pourriez écrire quelque chose comme ça:
Edit: vous pouvez même faire une méthode d'extension et l'utiliser comme ça
la source
par réflexion
Il en va de même pour les méthodes
la source
GetType()
y a une méthode commeGetProperties()
. Il renvoie un tableau dePropertyInfo
. Mais comment utiliser laGetProperties()
méthode?C'est une vieille question, mais je viens de la rencontrer.
Type.GetMethod(string name)
lèvera une AmbiguousMatchException s'il y a plus d'une méthode avec ce nom, donc nous ferons mieux de gérer ce casla source
Ne serait-il pas préférable de ne pas utiliser de types dynamiques pour cela et de laisser votre classe implémenter une interface. Ensuite, vous pouvez vérifier au moment de l'exécution si un objet implémente cette interface et, par conséquent, possède la méthode (ou propriété) attendue.
Je pense que c'est la seule manière correcte.
La chose à laquelle vous faites référence est le typage canard, ce qui est utile dans les scénarios où vous savez déjà que l'objet a la méthode, mais le compilateur ne peut pas vérifier cela. Ceci est utile dans les scénarios d'interopérabilité COM par exemple. (consultez cet article)
Si vous voulez combiner la frappe de canard avec la réflexion, par exemple, je pense que vous manquez l'objectif de la frappe de canard.
la source