Soru (1) ile ilgili olarak: Jon'un cevabı doğrudur, çünkü 'Nested' sınıfını herkese açık veya dahili hale getirerek örtük olarak işaretler :-). 'Özel' ekleyerek de bunu açıkça yapabilirsiniz:
private class Nested
Soru (2) ile ilgili olarak: temel olarak beforeinitfield ve type başlatma ile ilgili mesajın size söylediği şey, statik bir kurucunuz yoksa, çalışma zamanının herhangi bir zamanda (ancak kullanmadan önce) başlatabileceğidir. Statik bir kurucunuz varsa, statik kurucudaki kodunuz alanları başlatabilir, bu da çalışma zamanının yalnızca türü istediğinde alanı başlatmasına izin verildiği anlamına gelir.
Bu nedenle, çalışma zamanının alanları kullanmadan önce 'proaktif' olarak başlatmasını istemiyorsanız, statik bir yapıcı ekleyin.
Her iki durumda da, singletonları uyguluyorsanız, çalışma zamanının değişkeninizi başlatması gerektiğini düşündüğünde değil, mümkün olduğunca tembel olarak başlatılmasını istersiniz - ya da muhtemelen umursamıyorsunuzdur. Sorunuzdan sanırım onları mümkün olduğunca geç istiyorsunuz.
Bu, Jon'un singleton hakkında gönderdiği mesajla bir araya geldi , IMO bu sorunun altında yatan konudur. Ah ve şüpheler :-)
'Yanlış' olarak işaretlediği singleton # 3'ün aslında doğru olduğunu belirtmek isterim (çünkü kilit otomatik olarak çıkışta bir bellek bariyeri anlamına gelir ). Örneği bir kereden fazla kullandığınızda (tek bir noktanın az ya da çok :-) noktasıdır) ayrıca 2. tektondan daha hızlı olmalıdır. Yani, gerçekten tembel bir singleton uygulamasına ihtiyacınız varsa, muhtemelen bunun için giderdim - basit nedenlerden dolayı (1) neler olup bittiğini okuyan herkes için çok açık ve (2) neler olacağını biliyorsunuz istisnalar hariç.
Merak ediyorsanız: asla singleton # 6'yı kullanmam çünkü istisnalarla kolayca kilitlenmelere ve beklenmedik davranışlara yol açabilir. Ayrıntılar için bkz: tembel kilitleme modu , özellikle ExecutionAndPublication.