.NET4.0の新規クラス

Windows7環境を構築したので、そこにVisual Studio2010Beta2を入れてみました。時間的には全然余裕がないのですが、精神的にはちょっとゆとりが出てきたので、.NET4.0についてちまちま弄っていこうかと思っています。今日は、Lazyクラスを見てみることに。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace LazySample
{
    class Foo
    {
        public Foo()
        {
            Console.WriteLine("Hello");
        }
    }

    class Program
    {
        static Lazy<Foo> instance;

        static void Main(string[] args)
        {
            // trueを渡すとスレッドセーフ
            instance = new Lazy<Foo>(true);

            Console.WriteLine("Begin");
            // 最初のアクセスでFooが生成される
            var foo = instance.Value;
            Console.WriteLine("End");

            for (int i = 0; i < 10; ++i)
            {
                // 以降、何度アクセスしても生成されない
                var bar = instance.Value;
            }
        }
    }
}

/* 結果
Begin
Hello
End
 */

最初、Lazyというからには、関数言語ばりの遅延評価をサポートするクラスかと思いましたが、クラスのインスタンス化を遅延させるだけのようです。Singletonを実装するには便利かも知れませんが、自前で同等のクラスを作ってしまっている人がほとんどでは・・・(^^;