Les objets dynamiques C # 4.0 auront-ils une certaine facilité pour la frappe au canard?

StackOverflow https://stackoverflow.com/questions/259929

  •  06-07-2019
  •  | 
  •  

Question

En C # 4.0, nous allons obtenir des types dynamiques, ou des objets dont le "type statique est dynamique", selon Anders. Cela permettra à toute résolution d'invocation de méthode de se produire au moment de l'exécution plutôt que lors de la compilation. Mais y aura-t-il une possibilité de lier l’objet dynamique à une sorte de contrat (et donc d’obtenir ainsi un retour complet de son intelligence), plutôt que de permettre tout appel sur celui-ci même si vous savez qu’il n’est pas susceptible d’être valable.

I.e. au lieu de juste

dynamic foo = GetSomeDynamicObject();

avoir la possibilité de le convertir ou de le transformer pour le contraindre à un contrat connu, tel que

IFoo foo2 = foo.To<IFoo>;

ou même tout simplement

IFoo foo2 = foo as IFoo;

Vous ne trouvez rien de tel dans les matériaux existants pour C # 4.0, mais cela semble être une extension logique du paradigme dynamique. Quelqu'un avec plus d'informations?

Était-ce utile?

La solution

Je crains fort que je ne sois au courant de quoi que ce soit qui ressemble à une frappe de canard. J'ai blogué à propos de l'idée , mais je ne m'attends pas à un soutien. Il ne serait probablement pas trop difficile d’utiliser Reflection.Emit pour créer une classe qui générera l’implémentation d’une interface donnée, en prenant un objet dynamique dans le constructeur et en effectuant simplement un proxy pour chaque appel. Pas idéal, mais cela pourrait être un palliatif.

Autres conseils

C'est une bonne idée. Si je vous comprends bien, vous décrivez / proposez une fonctionnalité du CLR. Ainsi, lorsque vous essayez de convertir un objet dynamique en interface, il doit examiner les méthodes / propriétés prises en charge par l’objet dynamique et déterminer s’il en existe d’autres. mettre en œuvre efficacement cette interface. Ensuite, le CLR se chargerait de "mettre en œuvre IFoo" sur l'objet, de sorte que vous puissiez alors convertir l'objet dynamique en IFoo. Presque certain que cela ne sera pas supporté, mais c'est une idée intéressante.

Tobias Hertkorn a répondu à ma question sur ici avec un lien. à son blogpost montre un exemple d'utilisation de la méthode Convert () sur MetaObject pour renvoyer un proxy dynamique. Cela semble très très prometteur.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top