Une fois que vous avez un objet dynamique, le compilateur est moins tracassé au sujet toute méthode appelle, vous pourriez faire l'objet dynamique. Les appels seront résolus uniquement au moment de l'exécution. Dans ce cas, la méthode Read() est distribuée dynamiquement pendant l'exécution. Ce qui est plus beau, C# vous donne maintenant la possibilité de spécifier comment les appels dynamiques doivent être distribués. Vous pouvez implémenter IDynamicObject pour écrire vous-même ces classeurs. Par exemple, voyez comment je crée une classe de lecteur dynamique, ce qui vous permet d'appeler vos propres méthodes sur une instance de cette classe.
public class DynamicReader : IDynamicObject
{
public MetaObject GetMetaObject
(System.Linq.Expressions.Expression parameter)
{
return new DynamicReaderDispatch (parameter);
}
}
public class DynamicReaderDispatch : MetaObject
{
public DynamicReaderDispatch (Expression parameter)
: base(parameter, Restrictions.Empty){ }
public override MetaObject Call(CallAction action, MetaObject[] args)
{
//You might implement logic for dynamic method calls. Action.name
// will give you the method name
Console.WriteLine("Logic to dispatch Method '{0}'", action.Name);
return this;
}
}
Maintenant, le mot-clé dynamique peut être utilisé pour créer des objets dynamiques, tout comme
dynamic reader=new DynamicReader();
dynamic data=reader.Read();
Clever - Je vais essayer moi-même. – grefly
Mise à jour: Je ne le fais plus. J'ai trouvé plus facile de générer une classe vide et de laisser le test échouer d'autres façons. TDD correct ;-) –