C#のLazy<T>について調べてみたメモ

Lazyクラスは、NET Frameworkで提供されているクラスで、そのインスタンスが最初にアクセスされるまで値の生成を遅延させることができます。 これは、値の生成に時間がかかる場合や、必ずしもすぐに値が必要とされない場合に有用です。 learn.microsoft.com

実装例

簡単な実装例は次のようになります。

private Lazy<string> lazyValue = new Lazy<string>(() =>
{
    Debug.Log("Lazy value is being calculated");
    return "Hello, World!";
});

void Start()
{
    Debug.Log("first");
    Debug.Log(lazyValue.Value);
    Debug.Log("second");
    Debug.Log(lazyValue.Value);
    Debug.Log("third");
    Debug.Log(lazyValue.Value);
}

// 出力結果
first
Lazy value is being calculated
Hello, World!
second
Hello, World!
third
Hello, World!

このコードは、lazyValueというLazy型のインスタンスの値に3回アクセスしています。 Lazy型の特性により、lazyValue.Valueに初めてアクセスされたときに値が計算され、その後のアクセスでは既に計算された値が返されます。

注意点

先ほどの例のように、Lazyは遅延初期化を提供しますが、一度計算された値は変更されません。 したがって、プロパティの値が都度変わる可能性がある場合、Lazyは適切な選択ではないかもしれないので注意が必要です。