.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を実装するには便利かも知れませんが、自前で同等のクラスを作ってしまっている人がほとんどでは・・・(^^;