Неявная инициализация статического класса

Можно ли инициализировать статический класс при запуске приложения "автоматически"? Под автоматически я имею в виду без необходимости ссылки на свойство.

Причина, по которой я хочу сделать это, заключается в том, что я хочу автоматически запускать тему приложения при запуске.

Вот короткий фрагмент:

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 );

в конструкторе приложения (это проект WPF), и он будет работать, однако, по крайней мере, с моей точки зрения (поправьте меня, если я ошибаюсь, пожалуйста), было бы более целесообразно применять тему по умолчанию без необходимость в явном изложении этого.

1 ответ

Решение

Можно ли инициализировать статический класс при запуске приложения "автоматически"? Под автоматически я имею в виду без необходимости ссылки на свойство.

Единственный способ гарантировать выполнение статического конструктора - использовать тип в некоторой форме. Нет необходимости ссылаться на свойство (это может быть создание экземпляра, использование метода и т. Д.), Но вам нужно использовать тип. Статический конструктор может никогда не работать иначе.

Ваш текущий вариант или его вариант кажется лучшим решением. Вы можете изменить это на наличие одного вызова, такого как:

Settings.InstallDefaultTheme();

Если вы предпочитаете, так как ссылка Settings заставит статический конструктор выполнить.

Другие вопросы по тегам