隐式初始化静态类

pik*_*usp 5 c# static-constructor static-classes static-initialization static-class

是否有可能在应用程序启动时"自动"初始化静态类?我自动意思是不需要引用属性.

我希望能够做到这一点的原因是我想在启动时自动设置应用程序的主题.

这是一个简短的片段:

static class Settings{
    private static Theme _defaultTheme;
    public static Theme DefaultTheme{
        get{
            return _defaultTheme;
        }
        private set{
            _defaultTheme = value;
            ThemeManager.SetTheme(value);
        }
    }
    static Settings(){
        DefaultTheme = Themes.SomeTheme;
    }
}
Run Code Online (Sandbox Code Playgroud)

我知道我可以(现在就是这样)和原来的getter/setter一起去打电话

ThemeManager.SetTheme( Settings.DefaultTheme );
Run Code Online (Sandbox Code Playgroud)

在App的构造函数(它是WPF项目)中它会完成这项工作,但是,至少从我的观点来看(如果我错了请纠正我),更适合默认主题应用而不是需要明确说明它.

Ree*_*sey 5

是否有可能在应用程序启动时"自动"初始化静态类?我自动意思是不需要引用属性.

保证静态构造函数将执行的唯一方法是以某种形式使用该类型.它不需要引用属性(它可能是构造实例,使用方法等),但您确实需要使用该类型.静态构造函数可能永远不会运行.

您当前的选项或其变体似乎是最佳解决方案.您可以将此更改为单个调用,例如:

Settings.InstallDefaultTheme();
Run Code Online (Sandbox Code Playgroud)

如果您愿意,因为引用Settings会强制执行静态构造函数.