У меня есть класс следующим образом:
Статический конструктор не вызывается перед статическими полями
static class Configuration
{
private static AppSettingsSection _appSettingsLogsSection;
static Configuration()
{
var config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
_appSettingsLogsSection = config.GetSectionGroup("Logs").Sections["appSettings"] as AppSettingsSection;
}
public static int LogSendIntervalMinutes = Convert.ToInt32(_appSettingsLogsSection.Settings["LogSendIntervalMinutes"]);
}
Теперь, согласно моему пониманию, статический конструктор должен быть вызван до первой ссылки на любой статический элемент выполнен. Но удивительно, что это не так. Когда я ссылаюсь на LogSendIntervalMinutes из основного класса, вместо запуска статического конструктора вызов переходит прямо к статическому полю, в результате чего возникает исключение NullReferenceException.
Я делаю что-то неправильно здесь и правильно ли я понимаю?
Посмотрите на код компиляции, используя 'ILSpy' или' Reflector', вы найдете свой ответ. Фактически инициализаторы полей автоматически перемещаются внутри конструктора до вашего фактического кода конструктора. (статические переходы к статическому и экземпляру к экземпляру contructor). –
Я добавил моментальный снимок в ответ на ваш класс, используя отражатель для справки. –