これは、動的として知られるバージョン 4.0 の新しい C# の未来です。コードでそれを使用する方法と、この未来がどのように役立つかを教えてください。
関連する質問:
これは、動的として知られるバージョン 4.0 の新しい C# の未来です。コードでそれを使用する方法と、この未来がどのように役立つかを教えてください。
関連する質問:
TDD では C# の "dynamic" キーワードを使用します。
メソッド「Addition」が実装されていないため、このコードはコンパイルされません
[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);
}
"dynamic" キーワードを使用すると、コードはコンパイルされ、テストは失敗します! --> TDD
ここで答えを参照して ください
動的オブジェクトを作成すると、コンパイラは、動的オブジェクトに対して行う可能性のあるメソッド呼び出しについてほとんど気にしなくなります。呼び出しは実行時にのみ解決されます。この場合、メソッド 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 キーワードを使用して動的オブジェクトを作成できます。
dynamic reader=new DynamicReader();
dynamic data=reader.Read();
Anders Hejlsberg は、「The Future of C#」と呼ばれるちょっとした PDC セッションを行いました。dynamic キーワードの使用に関するかなり良いデモがあります。
用途の 1 つは、静的言語と動的言語の間の相互運用です。
Silverlight から JavaScript 関数を呼び出したいとします。
HtmlPage.Window.Invoke("HelloWorldFunction");
ウィンドウが動的 (かつ適切に実装されている) の場合、次のように使用できます。
HtmlPage.Window.HelloWorldFunction();