. NET 4.0 ma ładną klasę narzędziową o nazwie System.Lazy, która inicjuje leniwy obiekt. Chciałbym użyć tej klasy do projektu 3.5. Pewnego razu zobaczyłem implementację gdzieś w odpowiedzi na pytanie o stackoverflow, ale nie mogę go już znaleźć. Czy ktoś ma alternatywną implementację Lazy? Nie wymaga wszystkich funkcji bezpieczeństwa wątków w wersji 4.0 systemu.Implementacja Lazy <T> dla .NET 3.5
Aktualizacja:
Odpowiedzi zawierają non wątek bezpieczne i bezpieczna wersja wątek.
Mam dwa problemy z tym: Po pierwsze, lepiej jest" zablokować "obiekt prywatny niż" zablokować (ten) ", ponieważ nie można kontrolować, kto może zablokować twoją instancję 'Lazy'. Po drugie, nie wydaje mi się, żeby 'isValueCreated'' 'volatile' field służyło jakiemukolwiek celowi, gdy już używasz krytycznej sekcji (prawda? Popraw mnie jeśli się mylę). – Aaronaught
Zgadzam się, że lotny jest używany, gdy blokowanie nie jest używane. Od MSDN: Lotny modyfikator jest zwykle używany w przypadku pola, do którego dostęp ma wiele wątków bez użycia instrukcji lock do serializowania dostępu. Używanie lotnego modyfikatora zapewnia, że jeden wątek pobiera najbardziej aktualną wartość zapisaną przez inny wątek. –
Ja zmodyfikowałem odpowiedź. –