C# 4.0   動的型 の使い途を 妄 想 してみる 制作・著作・妄想 takeshik http://www.takeshik.org/  , @takeshik in Twitter
C# 4.0  の足音近づく! VS2010  の  CTP  が公開された C# 4.0  の新機能   ( の一部 ?)  も明らかに 動的型 キーワード引数、省略可能引数 ジェネリック型の共変性・反変性
C# 4.0  の新機能 「動的型」 dynamic dobj =  …  と宣言 dynamic   宣言された変数に対する手続きが その値に応じ動的に呼び出される COM  オブジェクト COM Interop  による呼び出し 普通のオブジェクト Reflection API  による呼び出し IDynamicObject   オブジェクト ユーザ定義の呼び出し
DynamicObject IDynamicObject   の標準実装 ユーザがオブジェクトの根本的な振る舞いを 自由に定義できる GetMember  :  値の取得 SetMember  :  値の設定 Invoke  /  InvokeMember  :  メソッドの呼び出し etc. 今までの「クラス定義の絶対性」の殻を破る
でも… 何に使えるの ?
そこで 使えそうな例を妄想して 皆様にご紹介 アイデアに著作権なし 煮るなり焼くなり ご自由にどうぞ
最近流行 ? の Web API とやらを C# で手軽に !
REST  ( みたいなの )   の概説 呼出の識別子  +  引数  : URI http://twitter.com/statuses/user_timeline.xml?page=3 結果  : XML 、 JSON 、 etc. REST  と一口に言っても内実は様々 REST  風規約が乱立している模様 細かい部分の差はあれど大筋は共通 この手の呼出は  C#  などの静的な オブジェクト指向言語でやるのは面倒 だったら  DynamicObject   を使えばいいお!
REST w/  DynamicObject とりあえず設計の概略だけ http://twitter.com/statuses/user_timeline.xml?page=3 を呼びたい…! コンストラクタでホスト名渡せばいいよね! dynamic t = new RestProxy("twitter.com"); 名前空間は  GetObject   使って表現 dynamic t_stat = twitter.statuses; で、メソッド呼出 XDocument result = t_stat.user_timeline(   page: 3 //  キーワード引数は使えないかも… ?  だったら :   //new object[] { "page", 3 } //  配列でも致し方ない ); ついったー以外でも   REST  風なら使えると思うよ!
こんな感じで 出来る …はず!
結論
動的型は 面白い! 取り組む 価値がある!
でも…それよりも 匿名デリゲート・ラムダ式で yield 使わせてください… orz
おしまい 参考文献 : DynamicObject  型の定義は http://gotnet.biz/Blog/post/The-Missing-SystemDynamicDynamicObject-Class.aspx を参照しました

わんくま東京#26 LT 「C# 4.0 動的型の使い途を妄想してみる」

  • 1.
    C# 4.0 動的型 の使い途を 妄 想 してみる 制作・著作・妄想 takeshik http://www.takeshik.org/ , @takeshik in Twitter
  • 2.
    C# 4.0 の足音近づく! VS2010 の CTP が公開された C# 4.0 の新機能 ( の一部 ?) も明らかに 動的型 キーワード引数、省略可能引数 ジェネリック型の共変性・反変性
  • 3.
    C# 4.0 の新機能 「動的型」 dynamic dobj = … と宣言 dynamic 宣言された変数に対する手続きが その値に応じ動的に呼び出される COM オブジェクト COM Interop による呼び出し 普通のオブジェクト Reflection API による呼び出し IDynamicObject オブジェクト ユーザ定義の呼び出し
  • 4.
    DynamicObject IDynamicObject の標準実装 ユーザがオブジェクトの根本的な振る舞いを 自由に定義できる GetMember : 値の取得 SetMember : 値の設定 Invoke / InvokeMember : メソッドの呼び出し etc. 今までの「クラス定義の絶対性」の殻を破る
  • 5.
  • 6.
    そこで 使えそうな例を妄想して 皆様にご紹介アイデアに著作権なし 煮るなり焼くなり ご自由にどうぞ
  • 7.
    最近流行 ? のWeb API とやらを C# で手軽に !
  • 8.
    REST (みたいなの ) の概説 呼出の識別子 + 引数 : URI http://twitter.com/statuses/user_timeline.xml?page=3 結果 : XML 、 JSON 、 etc. REST と一口に言っても内実は様々 REST 風規約が乱立している模様 細かい部分の差はあれど大筋は共通 この手の呼出は C# などの静的な オブジェクト指向言語でやるのは面倒 だったら DynamicObject を使えばいいお!
  • 9.
    REST w/ DynamicObject とりあえず設計の概略だけ http://twitter.com/statuses/user_timeline.xml?page=3 を呼びたい…! コンストラクタでホスト名渡せばいいよね! dynamic t = new RestProxy("twitter.com"); 名前空間は GetObject 使って表現 dynamic t_stat = twitter.statuses; で、メソッド呼出 XDocument result = t_stat.user_timeline( page: 3 // キーワード引数は使えないかも… ? だったら : //new object[] { "page", 3 } // 配列でも致し方ない ); ついったー以外でも REST 風なら使えると思うよ!
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
    おしまい 参考文献 :DynamicObject 型の定義は http://gotnet.biz/Blog/post/The-Missing-SystemDynamicDynamicObject-Class.aspx を参照しました