隐式初始化静态类

时间:2014-07-21 18:42:32

标签: c# static-classes static-initialization static-constructor 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;
    }
}

我知道我可以(以及目前的情况)与原始的getter / setter一起使用并致电

ThemeManager.SetTheme( Settings.DefaultTheme );

在App(它的WPF项目)的构造函数中,它会完成这项工作,但是,至少从我的观点来看(如果我误以为请纠正我)它&#39 ; d更有意义地应用默认主题而无需明确说明它。

1 个答案:

答案 0 :(得分:5)

  

是否可以在应用启动时自动初始化静态类"自动"?我自动意思是不需要引用属性。

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

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

Settings.InstallDefaultTheme();

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