The_Unknown_Member Ответов: 1

Помещает ли компилятор C# статический конструктор по умолчанию?


Я знаю, что компилятор C# поместит конструктор no-args по умолчанию для типов экземпляров, но что произойдет, если класс статичен? Это тот же самый случай?

Что я уже пробовал:

Глядя на руководство по программированию на C# для статических конструкторов, но не нашел ничего, связанного с моим вопросом.

PIEBALDconsult

Нет, скорее всего, нет, судя по тому, что говорит Джон Скит.
http://csharpindepth.com/Articles/General/BeforeFieldInit.aspx

1 Ответов

Рейтинг:
5

Richard Deeming

Глядя на IL, статический конструктор будет создан для вас только в том случае, если у вас есть статические инициализаторы полей / свойств.

// No static ctor:
public static class A { }

// Generated static ctor:
public static class B
{
    static int answer = 42;
}

// Generated static ctor:
public static class C
{
    public static int Answer { get; } = 42;
}

// Explicit static ctor:
public static class D
{
    static D()
    {
    }
}

Если нет инициализаторов полей или свойств и нет явного статического конструктора, то нет необходимости в статическом конструкторе.

Статические Конструкторы (Руководство По Программированию На C#) | Microsoft Docs[^]


The_Unknown_Member

Устанавливаются ли значения полей и свойств по умолчанию в конструкторе?

Richard Deeming

Нет; CLR обнуляет Память любого нового объекта, поэтому они автоматически устанавливаются по умолчанию, не нуждаясь в конструкторе.

Однако если вы нигде не зададите это поле, то, вероятно, получите предупреждение компилятора.

Ehsan Sajjad

хорошо объяснил, 5ed