Как статические конструкторы могут быть сделаны не частными?
Модификаторы доступа, такие как public
, private
, не допускаются к статическим конструкторам на С#. Тем не менее, анализ кода Visual Studio имеет предупреждение в категории безопасности С#, в котором говорится: " CA2121: статические конструкторы должны быть частными".
Можно ли сделать статический конструктор не приватным? Или это ошибка анализа кода Visual Studio?
CLARIFICATION. Я не пытаюсь сделать какой-либо конструктор не закрытым. Итак, почему? вопросы не имеют значения. Мне просто интересно узнать о противоречии между двумя инструментами Microsoft и хочу узнать, есть ли что-то, что я не знаю о том, как обрабатываются статические конструкторы.
Ответы
Ответ 1
Статический конструктор С# всегда является приватным. Вы никогда не должны видеть это предупреждение для кода С#, и предупреждение там не полезно. Анализ кода также доступен для других языков, и это другие языки, которые могут заставить вас писать классы с нестандартными статическими конструкторами.
Ответ 2
Если вы читаете документы, в нем четко указано
Если статический конструктор не является приватным, он может быть вызван кодом, отличным от системы. В зависимости от операций, выполняемых в конструкторе, это может привести к неожиданному поведению.
Я полагаю, что более важным вопросом было бы то, почему вы хотите?
Ответ 3
Можно ли сделать статический конструктор не приватным?
В чем смысл этого?
Статический конструктор называется моментом, когда класс загружается из компоновщика, прежде чем какой-либо метод выполнится. Таким образом, статический конструктор не может быть разумным вызываться вне автоматического вызова от компоновщика, что означает, что нет смысла в нем иметь какой-либо модификатор доступа.
В принципе, вы не можете ссылаться на класс БЕЗ ИСПОЛНЕНИЯ СТАТИЧЕСКОГО ИЗМЕНЕНИЯ - и это до того, как ваш код, содержащий эталон, будет выполняться.