@xXNullXx

Когда инициализируется статический метод?

Вот порядок инициализации(если не правильно то поправьте):
class Helper
{
    public static int Report(string str)
    {
        Console.WriteLine(str);
        return 0;
    }
}

class MyClass
{
    static int staticField = Helper.Report("2. Инициализация статических полей");

    static MyClass()
    {
        Helper.Report("3. Статический конструктор");
    }

    int field = Helper.Report("4. Инициализация нестатических полей");

    public MyClass(int c)
    {
        Helper.Report("5. Конструктор, вызванный другим конструктором");
    }

    public MyClass()
        : this(1)
    {
        Helper.Report("6. Явно вызванный конструктор");
    }

    public void Method()
    {
        Helper.Report("7. Метод");
    }
}

class Program
{
    public static void MainX()
    {
        Helper.Report("1. Начало программы");
        new MyClass().Method();
    }
}


И вот возник вопрос...
А когда инициализируется статический метод и не статический конструктор?
  • Вопрос задан
  • 374 просмотра
Решения вопроса 1
@cicatrix
было бы большой ошибкой думать
Метод не требует инициализации. Инициализации требуют поля/переменные.
Внутри статического метода они инициализируются в момент первого вызова этого метода.
Статический конструктор вызывается автоматически при создании первой внешней ссылки на переменные/поля класса.
Статические поля инициализируются ДО вызова конструктора.

А вообще, у вас сложный случай - надо смотреть, как это компилятор оптимизировал.

If a static constructor (§10.12) exists in the class, execution of the static field initializers occurs immediately prior to executing that static constructor. Otherwise, the static field initializers are executed at an implementation-dependent time prior to the first use of a static field of that class.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы