Ескертпе
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Жүйеге кіруді немесе каталогтарды өзгертуді байқап көруге болады.
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Каталогтарды өзгертуді байқап көруге болады.
| Свойство | Значение |
|---|---|
| Идентификатор правила | CA2207 |
| Заголовок | Выполняйте инициализацию статических полей типов значений на месте. |
| Категория | Использование |
| Исправление является критическим или не критическим | неразрывный |
| Включен по умолчанию в .NET 10 | Нет |
| Применимые языки | C# и Visual Basic |
Причина
Тип значения объявляет явный статический конструктор.
Описание правила
При объявлении типа значения он проходит инициализацию по умолчанию, когда все поля типа значения устанавливаются в ноль, а всем полям ссылочного типа присваивается значение null (Nothing в Visual Basic). Явный статический конструктор гарантированно выполняется только перед вызовом конструктора экземпляра или статического члена типа. Таким образом, если тип создается без вызова конструктора экземпляра, выполнение статического конструктора не гарантируется.
Если все статические данные инициализированы inline и не объявлен явный статический конструктор, компиляторы C# и Visual Basic добавляют флаг beforefieldinit в определение класса CIL. Компиляторы также добавляют закрытый статический конструктор, который содержит статический код инициализации. Этот закрытый статический конструктор гарантированно выполняется перед обращением к любым статическим полям типа.
Устранение нарушений
Чтобы устранить нарушение данного правила, выполните инициализацию всех статических данных при их объявлении и удалите статический конструктор.
Example
// This struct violates the rule.
struct BadStruct
{
private static readonly int s_first;
private static readonly int s_second;
static BadStruct()
{
s_first = 1;
s_second = 2;
}
// ...
}
// This struct satisfies the rule.
struct GoodStruct
{
private static readonly int s_first = 1;
private static readonly int s_second = 2;
// ...
}
Когда лучше отключить предупреждения
Для этого правила отключать вывод предупреждений не следует.
Связанные правила
CA1810: инициализируйте статические поля ссылочного типа встроенными средствами