n times・・・

いやまぁ遊びだけど。
ruby とかで、

3.times {
  puts 'Hello, world!'
}

ってやつ。

class Act
{
    public delegate void ActDelegate();
    
    ActDelegate act;
    
    public Act(ActDelegate act) { this.act = act; }
    
    public static ActDelegate operator *(Act a, int times)
    {
        return delegate
        {
            for (int i = 0; i < times; i++) a.act();
        };
    }
    
    public static ActDelegate operator +(Act a1, Act a2)
    {
        return delegate { a1.act(); a2.act(); };
    }
    
    public static ActDelegate operator +(ActDelegate a1, Act a2)
    {
        return delegate { a1(); a2.act(); };
    }
}

使い方はこう。

Act a = new Act(delegate { Console.WriteLine("Hello, world!"); });
(a * 3)();
Act b = new Act(delegate { Console.WriteLine("Hoge, world!"); });
(b + a + b * 3 + a)();

何に使うかだって・・・?さぁ?


追記:
3.0 な人たちに、拡張メソッドで、とか、ラムダ式で、とか色々とアドバイスもらいました。今泣きながら Visual C# 2008 Express Edition を DL 中w