Late Binding Macro
メーリングリストを見ていたら、Late Bindingを行うマクロが投稿されていました。面白そうなので、Booサイトにあったduck typingのサンプルを移植してみました。
using System; using System.Threading; using Kitsu.LateBinding; def CreateInstance (progID : string) { def t = Type.GetTypeFromProgID (progID); Activator.CreateInstance (t); } def ie = CreateInstance ("InternetExplorer.Application"); late { ie.Visible = true; ie.Navigate2 ("http://nemerle.org/"); while (ie.Busy:>bool) Thread.Sleep (500); def doc = ie.Document; Console.WriteLine ("{0} is {1} bytes long.", doc.title, doc.fileSize); }
変数ieの型はObjectなのに、メソッドやプロパティにアクセスしています。仕掛けはlateブロックで、この中ではLate Binding、つまり、Reflectionを使ったInvoke〜に変換されるのでした。
COM呼び出しなどの場合、便利そうですね。マクロの詳細についてはこちらを見てください。