Je dirais "non", mais ne commencez pas à l'utiliser de manière insensée. En fait, dynamic
est, d'après ce que j'ai évalué, plus rapide que la réflexion de base, puisqu'elle garde les délégués (plutôt que d'utiliser la réflexion Invoke
tout le temps). En particulier, deux points forts :
- l'appel à des méthodes génériques (
MakeGenericMethod
etc. est juste si douloureux)
- appel des opérateurs
Cependant, il existe des moyens de faire ce dont vous avez besoin avec des interfaces, etc ; dynamic
sur un type non-dynamique revient en fait à un typage en canard. Ceci est utile dans un très limité ensemble de scénarios ; principalement : les interfaces seraient préférables. Sans pour autant les exclure.
L'inconvénient de dynamic
est que pour être utile (sans écrire un code insensé), vous devez connaître les noms au moment de la compilation, ce qui n'est souvent pas le cas, sinon nous ne serions pas dans ce pétrin ! Lorsque vous ne connaissez le nom qu'au moment de l'exécution, il existe d'autres options ( Expression
, Delegate.CreateDelegate
, "HyperDescriptor", DynamicMethod
etc.) d'accéder aux données de manière rapide.