Question

Pour implémenter les méthodes "manquant", comme par exemple en C # 4.0, vous devez implémenter IDynamicObject:

public interface IDynamicObject
{
  MetaObject GetMetaObject(Expression parameter);
}

Autant que je sache, IDynamicObject fait en réalité partie du DLR. Ce n'est donc pas nouveau. Mais je n’ai pas trouvé beaucoup de documentation à ce sujet.

Il existe quelques exemples très simples d'implémentation (fx ici et ici ), mais est-ce que quelqu'un pourrait m'indiquer des implémentations plus complètes ou une documentation réelle?

En particulier, comment êtes-vous censé gérer le paramètre "paramètre"?

Était-ce utile?

La solution

La réponse courte est que c'est le métaobjet qui est responsable de la génération du code qui sera exécuté sur le site de l'appel. Il utilise pour cela les arbres d’expression LINQ, qui ont été améliorés dans le DLR. Ainsi, au lieu de commencer par un objet, il commence par une expression qui représente l'objet et, finalement, il devra renvoyer un arbre d'expression décrivant l'action à entreprendre.

Lorsque vous jouez avec cela, n’oubliez pas que la version de System.Core dans le CTP a été prise à partir d’un instantané à la fin du mois d’août. Cela ne correspond pas vraiment à une version bêta particulière d'IronPython. Un certain nombre de modifications ont été apportées au DLR depuis lors.

De plus, pour des raisons de compatibilité avec le System.Core CLR v2, les versions d'IronPython commençant par la version bêta 4 ou bêta 5 renomme désormais tout ce qui se trouve dans l'espace de noms System pour qu'il soit désormais dans l'espace de noms Microsoft.

Autres conseils

Si vous souhaitez un exemple complet incluant le code source, résultant en un objet dynamique qui stocke la valeur des propriétés arbitraires dans un dictionnaire, mon post " Un premier Regardez Duck Typing in C # 4.0 " pourrait vous convenir. J'ai écrit ce post pour montrer comment un objet dynamique peut être transtypé en interfaces statiquement typées. Il a une implémentation complète de travail d'un canard qui est un IDynamicObject et peut agir comme un IQuack.

Si vous avez besoin de plus d'informations, contactez-moi sur mon blog et je vous aiderai dans la mesure du possible.

Je viens de bloguer sur la procédure à suivre ici:

http://mikehadlow.blogspot.com /2008/10/dynamic-dispatch-in-c-40.html

Voici ce que j'ai découvert jusqu'ici:

Le Dynamic Language Runtime est actuellement maintenu dans le cadre du projet IronPython . C’est donc le meilleur endroit où aller pour obtenir des informations.

Le moyen le plus simple d'implémenter une classe prenant en charge IDynamicObject semble être de tirer Microsoft.Scripting.Actions.Dynamic et substitue les méthodes appropriées, par exemple la méthode Call pour implémenter la sémantique de l'appel de fonction. Il semble que Microsoft.Scripting.Actions.Dynamic n’a pas été inclus dans le CTP, mais celui d’IronPython 2.0 semble pouvoir fonctionner.

Je ne comprends toujours pas la signification exacte du paramètre "paramètre", mais il semble fournir un contexte pour la liaison de l'objet dynamique.

Cette présentation fournit également de nombreuses informations sur le DLR:

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