LazyInitializer Class

July 28, 2014

Provides lazy initialization routines.

System.Object
  System.Threading.LazyInitializer

Namespace:  System.Threading
Assembly:  mscorlib (in mscorlib.dll)

public static class LazyInitializer

  NameDescription
Public methodStatic memberEnsureInitialized<T>(T)Initializes a target reference type with the type's default constructor if the target has not already been initialized.
Public methodStatic memberEnsureInitialized<T>(T, Func<T>)Initializes a target reference type using the specified function if it has not already been initialized.
Public methodStatic memberEnsureInitialized<T>(T, Boolean, Object)Initializes a target reference or value type with its default constructor if it has not already been initialized.
Public methodStatic memberEnsureInitialized<T>(T, Boolean, Object, Func<T>)Initializes a target reference or value type with a specified function if it has not already been initialized.
Top

These routines avoid needing to allocate a dedicated, lazy-initialization instance, instead using references to ensure targets have been initialized as they are accessed.

The following example demonstrates how to use EnsureInitialized to lazily initialize a value using a Boolean value to track whether initialization has already happened and an object to use as the mutual exclusion lock.

Dim _data As ExpensiveData = Nothing
Dim _dataInitialized As Boolean = False
Dim _dataLock As Object = Nothing
'    ...
Dim name = LazyInitializer.EnsureInitialized(_data, _dataInitialized, _dataLock)

[C#]

ExpensiveData _data = null;
                     bool _dataInitialized = false;
                     object _dataLock = new object();
                  //  ...

                    ExpensiveData dataToUse = LazyInitializer.EnsureInitialized(ref _data, ref _dataInitialized, ref _dataLock);

Windows Phone OS

Supported in: 8.1, 8.0

The methods of LazyInitializer are thread-safe and may be called from multiple threads concurrently.

Show:
© 2014 Microsoft