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

1,806 views

Published on

@ わんくま同盟 東京勉強会 #26 - ライトニングトーク大集合!!

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
1,806
On SlideShare
0
From Embeds
0
Number of Embeds
20
Actions
Shares
0
Downloads
3
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

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

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

×