C #: определить, был ли класс уже инициализирован - PullRequest
0 голосов
/ 15 ноября 2018

У меня есть много классов в сборке, которые я не могу или не хочу изменять.В какой-то момент времени выполнения я хочу знать, какие из них уже были «инициализированы»: статический инициализатор (= статический конструктор) запустился.

Есть ли способ сделать это с помощью отражения или чего-то еще?

Для справки, не каждый класс в сборке инициализируется при загрузке сборки.Это можно легко увидеть с помощью этого кода:

public static class Foo
{
    static Foo() { MainClass.Value = "Something"; }
    public static void DoSomething() { Thread.Sleep(100); }
}

public static class MainClass
{
    public static string Value = "Nothing";

    public static void Main()
    {
        Console.WriteLine(Value);
        Foo.DoSomething();
        Console.WriteLine(Value);
    }
}

Отображение:

Nothing
Something

1 Ответ

0 голосов
/ 02 марта 2019

Как сказано HimBromBeere и как подтверждено в этой статье ,

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

Так что вам нужно один раз использовать свой класс, свойство, метод, что угодно, чтобы инициализировать его ... У вас нет контроля над ним, вы можете 'Вы не можете вызывать его программно, и, если вы хотите знать, использовался ли статический конструктор, вы будете использовать класс, чтобы он мог быть вызван в этот момент ...

Как сказано Rango , вы можете использовать флаг в своем конструкторе, если вам действительно нужно знать ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...