Dynamic Lookup
http://blogs.msdn.com/charlie/archive/2008/01/25/future-focus.aspx
C# 開発チームで、将来的に導入を考えている新機能について、今後(月一くらいで?)連載するみたい。新機能の内容に関しては、まだ決定事項ではないし、概要のみ。
初回は Dynamic Lookup について。要するに、以下のような構文を追加したいらしい。
dynamic { object myDynamicObject = GetDynamicObject(); myDynamicObject.SomeMethod(); // call a method myDynamicObject.someString = "value"; // Set a field myDynamicObject[0] = 25; // Access an indexer }
目的というか、考えられる利用場面は以下のような感じだそうです。
まあ、dynamic ブロック構文の追加は妥当な線ですかね。静的バインディングと同じ記法で動的バインディングはをしたいけども、その2者の区別がまったく付かないのは、静的言語である C# 的には嫌なわけで。
でも、どういう実装になるんでしょう。単に、以下のようなコードに展開されるシンタックスシュガーになるんですかね。
object o = GetDynamicObject(); o.GetType().InvokeMember("SomeMethod", BindingFlags.Public | BindingFlags.InvokeMethod, null, o, null); o.GetType().GetField("someString").SetValue(o, "value"); o.GetType().GetProperty("Item", typeof(int)).SetValue(o, 25, new object[] { 0 });
フィールドとプロパティの区別とかどうするんだろう。