【发布时间】:2014-02-25 21:32:14
【问题描述】:
我有一堂课如下:
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"]);
}
现在,根据我的理解,应该在第一次引用任何静态成员之前调用静态构造函数。但令人惊讶的是,它的行为并非如此。当我从 Main 类引用 LogSendIntervalMinutes 时,不是触发静态构造函数,而是直接调用静态字段,导致 NullReferenceException。
我在这里做错了什么吗?我的理解是否正确?
【问题讨论】:
-
使用
ILSpy或Reflector查看编译代码你会找到答案。实际上,字段初始值设定项会在构造函数的实际代码之前自动移动到构造函数中。 (静态移动到静态一和实例到实例构造器)。 -
我已经为你的班级添加了一个快照,使用反射器供你参考。