Au sujet de la question (1): La réponse de Jon est correct, puisqu'il a implicitement les marques de la catégorie "Imbriquées" privée en ne la rendant pas public ou interne :-). Vous pourriez aussi bien le faire explicitement par l'ajout de "privé":
private class Nested
Au sujet de la question (2): essentiellement, ce que le post sur beforeinitfield et le type d'initialisation de vous dire que si vous n'avez pas de constructeur statique, le runtime peut l'initialiser à tout moment (mais avant de l'utiliser). Si vous avez un constructeur statique, votre code dans le constructeur statique peut initialiser les champs, ce qui signifie que le moteur d'exécution est seulement autorisé à initialiser le champ lorsque vous demandez pour le type.
Donc, si vous ne voulez pas le moteur d'exécution pour initialiser les champs de façon proactive avant de les utiliser, ajouter un constructeur statique.
De toute façon, si vous êtes à la mise en œuvre des singletons vous souhaitez initialiser comme des paresseux que possible, et non pas lorsque le moteur d'exécution pense qu'il doit initialiser vos variables -- ou vous avez probablement juste de ne pas les soins. À partir de votre question, je suppose que vous voulez le plus tard possible.
Qui apporte rencontré de Jon post sur singleton's, qui est de l'OMI, les sous-jacents au sujet de cette question. Oh, et les doutes :-)
Je tiens à rappeler que son singleton #3, il a marqué "mauvais", est en fait correcte (car lock automatiquement implique une barrière de mémoire sur la sortie). Il devrait également être plus rapide que le singleton #2 lorsque vous utilisez l'instance, plus d'une fois (ce qui est plus ou moins le point de singleton :-) ). Donc, si vous avez vraiment besoin d'un paresseux singleton mise en œuvre, je serais probablement aller pour un, pour la simple raisons que (1) il est très clair pour tout le monde qui lit votre code ce qui se passe et (2) vous savez ce qui va arriver avec des exceptions.
Dans le cas où vous vous poseriez la question: je n'aurais jamais utiliser singleton #6, car il peut facilement conduire à des blocages et un comportement inattendu avec des exceptions. Pour plus de détails, voir: paresseux du mode de verrouillage, plus précisément ExecutionAndPublication.