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
 */

指定したインタフェースに対し委譲コードを自動生成するマクロのようです。なにげに便利な気が。オマケにしておくのは勿体ないなぁ。