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