.NET 4.0 có lớp tiện ích tốt được gọi là System.Lazy làm khởi tạo đối tượng lười. Tôi muốn sử dụng lớp này cho một dự án 3.5. Một lần tôi nhìn thấy một thực hiện ở đâu đó trong một câu trả lời stackoverflow nhưng tôi không thể tìm thấy nó nữa. Có ai có thực hiện thay thế Lazy? Nó không cần tất cả các tính năng an toàn của phiên bản 4.0 của khung công tác.Thực hiện Lazy <T> cho .NET 3.5
Cập nhật:
Answers chứa a thread không an toàn và một phiên bản đề an toàn.
Hai vấn đề tôi có với điều này: Trước hết, nên' khóa' một đối tượng riêng tư hơn là 'khóa (this)', vì bạn không thể kiểm soát ai khác có thể khóa trên ví dụ 'Lazy' của bạn. Thứ hai, tôi không nghĩ rằng việc tạo ra 'isValueCreated' là một trường' volatile' phục vụ bất kỳ mục đích gì khi bạn đã sử dụng một phần quan trọng (đúng không? Sửa chữa nếu tôi sai). – Aaronaught
Tôi đồng ý dễ bay hơi được sử dụng khi khóa không được sử dụng. Từ MSDN: Bộ sửa đổi dễ bay hơi thường được sử dụng cho một trường được truy cập bởi nhiều luồng mà không sử dụng lệnh khóa để truy cập tuần tự. Sử dụng công cụ sửa đổi dễ bay hơi, đảm bảo rằng một chuỗi truy lục giá trị cập nhật mới nhất được viết bởi một chuỗi khác. –
Tôi đã sửa đổi câu trả lời. –