Proxyマクロ
Nemerleのサンプルコードを漁っていたら、ちょっと面白いものを発見。
using System; public interface ICalc1 { Add (x : int, y : int) : int; Sub (x : int, y : int) : int; } public interface ICalc2 { Mul (x : int, y : int) : int; Div (x : int, y : int) : int; } class Foo { public Add (x : int, y : int) : int { x + y } public Sub (x : int, y : int) : int { x - y } } class Bar { public Mul (x : int, y : int) : int { x * y } public Div (x : int, y : int) : int { x / y } } public class Math { [DesignPatterns.Proxy (ICalc1)] foo : Foo = Foo (); [DesignPatterns.Proxy (ICalc2)] bar : Bar = Bar (); } def m = Math (); Console.WriteLine (m.Add (4, 2)); Console.WriteLine (m.Sub (4, 2)); Console.WriteLine (m.Mul (4, 2)); Console.WriteLine (m.Div (4, 2)); /* 結果 6 2 8 2 */
指定したインタフェースに対し委譲コードを自動生成するマクロのようです。なにげに便利な気が。オマケにしておくのは勿体ないなぁ。