CA2207: инициализируйте статические поля типа значений встроенными средствами
Свойство | Значение |
---|---|
Идентификатор правила | CA2207 |
Заголовок | Используйте встроенную инициализацию статических полей типов значений |
Категория | Использование |
Исправление является критическим или не критическим | Не критическое |
Включен по умолчанию в .NET 9 | No |
Причина
Тип значения объявляет явный статический конструктор.
Описание правила
При объявлении типа значения он проходит инициализацию по умолчанию, когда все поля типа значения устанавливаются в ноль, а всем полям ссылочного типа присваивается значение null
(Nothing
в Visual Basic). Явный статический конструктор гарантированно выполняется только перед вызовом конструктора экземпляра или статического члена типа. Таким образом, если тип создается без вызова конструктора экземпляра, статический конструктор может и не запускаться.
Если все статические данные инициализированы встроенными и не объявлены явные статические конструкторы, компиляторы C# и Visual Basic добавляют флаг в beforefieldinit
определение класса CIL. Компиляторы также добавляют закрытый статический конструктор, который содержит статический код инициализации. Этот закрытый статический конструктор гарантированно выполняется перед обращением к любым статическим полям типа.
Устранение нарушений
Чтобы устранить нарушение данного правила, выполните инициализацию всех статических данных при их объявлении и удалите статический конструктор.
Когда лучше отключить предупреждения
Для этого правила отключать вывод предупреждений не следует.
Связанные правила
CA1810: инициализируйте статические поля ссылочного типа встроенными средствами