2008-11-19 27 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