Примечание: я предполагаю, что VB работает так же, как C # здесь.Я был бы удивлен, если бы они отличались от этого.
Если вы оставите это там (и у вас нет статического конструктора), это будет зависеть от версии .NET, которую вы используете.Гарантируется, что он будет запущен «в какой-то момент перед первой ссылкой на статическое поле».Вы даже можете создавать экземпляры, и инициализатор типа может не работать!Если у вас есть статический конструктор (даже пустой), инициализатор типа будет запускаться напрямую перед первой ссылкой на любой конструктор или любой статический член.(По сути, почти все, что вы на самом деле делаете с ним, инициализирует его.)
Фактическое наблюдаемое поведение стало более медленным в .NET 4 по сравнению с .NET 3.5, , как я писал в блоге о .Обратите внимание, что речь идет только о платформе рабочего стола;Я не знаю, что делают Silverlight или Compact Framework.
Если метод может вызвать исключение, я бы соблазнился сделать это более лениво, во-первых, при вызове метода, возможно, кешированиярезультат соответственно.Таким образом, метод может позволить исключению всплыть, а вызывающая сторона может повторить попытку позже.Это уместно, если вы рассматриваете это потенциально временное исключение.Если это что-то, что указывает на то, что вся система непригодна для использования, можно позволить инициализатору типа завершиться с ошибкой.