Lazy <T> fornece um método integrado de inicialização de uma instância sob demanda com sincronização opcional para segurança de thread. Você pode querer herdar de Lazy <T> para polimorfismo, mas achar difícil escrever um construtor que possa fazer referência a um delegado baseado em instância para usar como valueFactory.
Aqui está uma técnica para atingir esse objetivo.
public class LinkedRecord : Lazy<object>
{
public LinkedRecord(int key)
:this(new Loader(key))
{
}
private LinkedProperty(Loader loader)
: base(loader.GetValue, LazyThreadSafetyMode.None)
{
}
private class Loader
{
private readonly string _key;
public Loader(int key)
{
this._key = key;
}
public object GetValue()
{
// expensive initialization goes here
}
}
}