Per quanto riguarda la domanda (1): la risposta di Jon è corretta, dal momento che segna implicitamente la classe "Annidata" privata non rendendola pubblica o interna :-). Puoi anche farlo esplicitamente aggiungendo "privato":
private class Nested
Per quanto riguarda la domanda (2): sostanzialmente ciò che ti dice il post su beforeinitfield e l' inizializzazione del tipo è che se non hai un costruttore statico, il runtime può inizializzarlo in qualsiasi momento (ma prima di usarlo). Se si dispone di un costruttore statico, il codice nel costruttore statico potrebbe inizializzare i campi, il che significa che al runtime è consentito inizializzare il campo solo quando si richiede il tipo.
Quindi, se non si desidera che il runtime inizializzi i campi 'in modo proattivo' prima di utilizzarli, aggiungere un costruttore statico.
In entrambi i casi, se stai implementando i singoli punti o vuoi che inizializzi il più pigro possibile e non quando il runtime pensa che dovrebbe inizializzare la tua variabile - o probabilmente non ti interessa. Dalla tua domanda suppongo che li desideri il più tardi possibile.
Ciò porta a incontrare il post di Jon sul tema di Singleton , che è l'IMO il tema alla base di questa domanda. Oh e i dubbi :-)
Vorrei sottolineare che il suo singleton n. 3, che ha contrassegnato come "sbagliato", è in realtà corretto (perché il blocco implica automaticamente una barriera di memoria all'uscita ). Dovrebbe anche essere più veloce di singleton # 2 quando usi l'istanza più di una volta (che è più o meno il punto di un singleton :-)). Quindi, se hai davvero bisogno di un'implementazione pigra di singleton, probabilmente lo farei per quello - per i semplici motivi che (1) è molto chiaro per tutti coloro che leggono il tuo codice cosa sta succedendo e (2) sai cosa accadrà con eccezioni.
Nel caso ti stia chiedendo: non userei mai singleton # 6 perché può facilmente portare a deadlock e comportamenti imprevisti con eccezioni. Per i dettagli, consultare: modalità di blocco di pigro , in particolare ExecutionAndPublication.