Về câu hỏi (1): Câu trả lời từ Jon là đúng, vì ông đã kiên quyết đánh dấu sự lớp 'lồng' tin bằng cách không làm cho nó công cộng hoặc nội bộ: -). Bạn cũng có thể làm điều đó một cách rõ ràng bằng cách thêm 'tin':
private class Nested
Về câu hỏi (2): về cơ bản những gì the post about beforeinitfield và type initialization nói với bạn là nếu bạn không có constructor tĩnh, thời gian chạy có thể khởi tạo nó bất cứ lúc nào (nhưng trước khi bạn sử dụng nó). Nếu bạn có một hàm tạo tĩnh, mã của bạn trong hàm dựng tĩnh có thể khởi tạo các trường, có nghĩa là thời gian chạy chỉ được phép khởi tạo trường khi bạn yêu cầu loại đó.
Vì vậy, nếu bạn không muốn thời gian chạy khởi tạo 'chủ động' trước khi bạn sử dụng chúng, hãy thêm một hàm tạo tĩnh. Dù bằng cách nào, nếu bạn đang triển khai thực đơn, bạn hoặc muốn nó khởi tạo là lười nhất có thể và không phải khi thời gian chạy nghĩ rằng nó nên khởi tạo biến của bạn - hoặc bạn có thể không quan tâm. Từ câu hỏi của bạn, tôi cho rằng bạn muốn họ càng muộn càng tốt.
Điều đó mang đến cho bài đăng của Jon về số singleton, là IMO chủ đề cơ bản của câu hỏi này. Oh và những nghi ngờ :-)
Tôi muốn chỉ ra rằng bài hát số 3 của anh ấy, mà anh ấy đánh dấu 'sai', thực sự là chính xác (vì khóa tự động implies a memory barrier on exit). Nó cũng nên nhanh hơn singleton # 2 khi bạn sử dụng cá thể nhiều hơn một lần (nhiều hay ít điểm của một singleton :-)).Vì vậy, nếu bạn thực sự cần triển khai thực đơn lười biếng, có lẽ tôi sẽ chọn cái đó - vì những lý do đơn giản là (1) rất rõ ràng cho mọi người đọc mã của bạn những gì đang diễn ra và (2) bạn biết điều gì sẽ xảy ra với ngoại lệ.
Trong trường hợp bạn đang tự hỏi: Tôi sẽ không bao giờ sử dụng singleton # 6 vì nó có thể dễ dàng dẫn đến deadlocks và hành vi bất ngờ với ngoại lệ. Để biết chi tiết, xem: lazy's locking mode, cụ thể là ExecutionAndPublication.
haha Tôi nghĩ rằng tôi đã nói rằng có một chút lo lắng lol ... hóa ra là một John Nolan khác nhau –
Vì vậy, bằng cách đặt câu hỏi về mã của Jon Skeet, bạn sẽ nhận được 1000 lượt xem và phản hồi từ chính Skeet. –
Hai điều được chấp nhận rộng rãi: mặt trời mọc từ phía đông và Jon Skeet luôn đúng. Nhưng tôi chưa chắc về điều này: P –