2010-11-19 2 views
1

J'ai un type que je construis avec TypeBuilder pour correspondre à une interface, comme celui-ci ::Pourquoi Dynamic ne parvient pas à invoquer des méthodes sur mon objet construit dynamiquement?

interface IFoo 
{ 
    int Property{get;} 
} 

Mon code construit la méthode get_Property. Si je lance mon objet construit comme IFoo, tout fonctionne. Cependant, lorsque j'utilise l'objet comme dynamique, le code se plaint que mon IFoo n'implémente pas get_Property. Pourquoi cela se produit-il, ne puis-je pas utiliser la fonctionnalité dynamique avec des types construits au moment de l'exécution?

Répondre

1

dynamic utilise l'API publique. Si vous utilisez TypeBuilder il est possible que vous ayez juste fourni une méthode et l'ai marqué comme implémentant cette méthode, auquel cas il s'agit (essentiellement) d'une implémentation d'interface explicite, et indétectable par dynamic. Pour utiliser dynamic il faudrait probablement PropertyBuilder et une propriété publique, avec la méthode d'implémentation de la propriété également marquée comme l'implémentation de l'interface.

A titre de comparaison, dynamic échouerait aussi avec:

class Foo : IFoo { 
    int IFoo.Property { get {return 5;}} 
} 
+0

Wow, merci pour la réponse rapide! C'est sacrément boiteux cependant. Je suppose que je dois faire plus de travail sur mon cône de canard. Je pense qu'il est vraiment difficile de forcer C# à devenir un langage dynamique. –

Questions connexes