2008-11-19 9 views

Répondre

2

L'un des usages est Interop entre les langues statiques et dynamiques.

que vous voulez appeler une fonction JavaScript Fron silverlight:

HtmlPage.Window.Invoke("HelloWorldFunction"); 

Si la fenêtre a été dynamique (et correctement mis en œuvre), vous pourrez l'utiliser comme ceci:

HtmlPage.Window.HelloWorldFunction(); 
3

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(); 
3

Nous utilisons le C# mot-clé "dynamique" avec TDD.

Ce code ne compile pas parce que la méthode « addition » n'est pas mis en œuvre

[TestMethod()] 
public void CalculatorThingAdd_2PositiveNumbers_ResultAdded() 
{ 
    CalculatorThing myCalculator = new CalculatorThing(); 
    int result = 0; 
    int expcected = 3; 

    // --> CalculatorThing does not contain a definition for 'Addition' 
    result = myCalculator.Addition(1, 2); 

    Assert.AreEqual(result, expcected); 
} 

le mot le code « dynamique » compile et le test échoue! -> TDD

Voir la réponse ici https://stackoverflow.com/questions/244302/what-do-you-think-of-the-new-c-4-0-dynamic-keyword/2243818#2243818

+0

Clever - Je vais essayer moi-même. – grefly

+2

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 ;-) –