Created
July 11, 2018 12:46
-
-
Save nicloay/6b25f36c5a156eb5f91a582bc851d979 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/// <summary> | |
/// Provides support for lazy initialization. | |
/// </summary> | |
/// <typeparam name="T">Specifies the type of object that is being lazily initialized.</typeparam> | |
public sealed class Lazy<T> | |
{ | |
private readonly object padlock = new object(); | |
private readonly Func<T> createValue; | |
private bool isValueCreated; | |
private T value; | |
/// <summary> | |
/// Gets the lazily initialized value of the current Lazy{T} instance. | |
/// </summary> | |
public T Value | |
{ | |
get | |
{ | |
if (!isValueCreated) | |
{ | |
lock (padlock) | |
{ | |
if (!isValueCreated) | |
{ | |
value = createValue(); | |
isValueCreated = true; | |
} | |
} | |
} | |
return value; | |
} | |
} | |
/// <summary> | |
/// Gets a value that indicates whether a value has been created for this Lazy{T} instance. | |
/// </summary> | |
public bool IsValueCreated | |
{ | |
get | |
{ | |
lock (padlock) | |
{ | |
return isValueCreated; | |
} | |
} | |
} | |
/// <summary> | |
/// Initializes a new instance of the Lazy{T} class. | |
/// </summary> | |
/// <param name="createValue">The delegate that produces the value when it is needed.</param> | |
public Lazy(Func<T> createValue) | |
{ | |
if (createValue == null) throw new ArgumentNullException("createValue"); | |
this.createValue = createValue; | |
} | |
/// <summary> | |
/// Creates and returns a string representation of the Lazy{T}.Value. | |
/// </summary> | |
/// <returns>The string representation of the Lazy{T}.Value property.</returns> | |
public override string ToString() | |
{ | |
return Value.ToString(); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment