Относительно вопроса (1): Ответ от Джона верен, поскольку он неявно помечает класс как «Вложенный» как закрытый, не делая его открытым или внутренним :-).Вы могли бы также сделать это явно, добавив 'private':
private class Nested
Относительно вопроса (2): в основном, что сообщение о beforeinitfield и инициализации типа говоритвы в том, что если у вас нет статического конструктора, среда выполнения может инициализировать его в любое время (но до того, как вы его используете).Если у вас есть статический конструктор, ваш код в статическом конструкторе может инициализировать поля, что означает, что во время выполнения разрешено инициализировать поле только при запросе типа.
Так что если вы этого не сделаетехотите, чтобы среда выполнения инициализировала поля «проактивно», прежде чем использовать их, добавьте статический конструктор.
В любом случае, если вы реализуете одиночные пакеты, вы хотите, чтобы они инициализировались как можно более ленивыми, а не тогда, когда среда выполнения думаетон должен инициализировать вашу переменную - или вам, вероятно, просто все равно.От вашего вопроса, я полагаю, вы хотите, чтобы они как можно позже.
Это знакомит с постом Джона о singleton , который является IMO основной темой этого вопроса.Да, и сомнения: -)
Я хотел бы отметить, что его синглтон # 3, который он пометил как «неправильный», на самом деле правильный (потому что блокировка автоматически подразумевает барьер памяти при выходе ).Он также должен быть быстрее, чем синглтон # 2, когда вы используете экземпляр более одного раза (что более или менее является точкой синглтона :-)).Итак, если вам действительно нужна ленивая одноэлементная реализация, я бы, вероятно, пошел на это - по простым причинам: (1) для всех очень ясно, что читает ваш код, что происходит, и (2) вы знаете, что произойдетс исключениями.
На случай, если вам интересно: я бы никогда не использовал синглтон # 6, потому что это может легко привести к тупикам и неожиданному поведению с исключениями.Подробнее см. режим блокировки lazy , в частности, ExecutionAndPublication.