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
}

目的というか、考えられる利用場面は以下のような感じだそうです。

  • COM 相互運用
  • 動的言語との連携のため、動的言語で書かれた型にアクセス
  • リフレクションの利便性向上

まあ、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 });

フィールドとプロパティの区別とかどうするんだろう。