2008-11-19 48 views

回答

2

其中一个用途是互操作的静态和动态语言之间。

说你要调用一个JavaScript函数弗朗的Silverlight:

HtmlPage.Window.Invoke("HelloWorldFunction"); 

如果窗口是动态的(和正确实施),你将能够使用它像这样:

HtmlPage.Window.HelloWorldFunction(); 
3

一旦你一个动态的对象,编译器至少打扰任何方法调用,你可能使动态对象。这些调用仅在运行时解决。在这种情况下,Read()方法在运行期间动态分派。

更美的是,C#现在可以灵活地指定应该如何调度动态调用。你可以实现IDynamicObject,自己写这些绑定器。例如,看看我如何创建一个动态阅读器类,它允许你在一个实例上调用你自己的方法。现在

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; 
     } 
    } 

,动态关键字可用于创建动态对象,很像

dynamic reader=new DynamicReader(); 
dynamic data=reader.Read(); 
3

我们使用C# “动态” 的关键字与TDD。

此代码不能编译,因为该方法“加法”未实现

[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); 
} 

随着“动态”关键字代码编译和测试失败! - > TDD

看到这里回答 https://stackoverflow.com/questions/244302/what-do-you-think-of-the-new-c-4-0-dynamic-keyword/2243818#2243818

+0

聪明 - 我要去尝试自己。 – grefly 2011-07-15 14:17:35