.NET 4.0 ha una buona classe di utilità chiamata System.Lazy che esegue l'inizializzazione di oggetti pigri. Mi piacerebbe usare questa classe per un progetto 3.5. Una volta ho visto un'implementazione da qualche parte in una risposta StackOverflow ma non riesco a trovarla più. Qualcuno ha un'implementazione alternativa di Lazy? Non ha bisogno di tutte le funzionalità di sicurezza del thread della versione 4.0 del framework.Implementazione di Lazy <T> per .NET 3.5
Aggiornato:
risposte contengono un non thread-safe e una versione thread-safe.
Due problemi con questo: Prima di tutto, è preferibile" bloccare "un oggetto privato piuttosto che" bloccare (questo) ", poiché non puoi controllare chi altrimenti potrebbe bloccare l'istanza 'Lazy'. In secondo luogo, non penso che creare "isValueCreated" sia un campo "volatile" utile a qualsiasi scopo quando si sta già utilizzando una sezione critica (vero? Correggimi se sbaglio). – Aaronaught
Accetto volatile viene utilizzato quando il blocco non viene utilizzato. Da MSDN: il modificatore volatile viene solitamente utilizzato per un campo a cui si accede da più thread senza utilizzare l'istruzione lock per serializzare l'accesso. L'utilizzo del modificatore volatile garantisce che un thread recuperi il valore più aggiornato scritto da un altro thread. –
Ho modificato la risposta. –