Неявная инициализация статического класса
Можно ли инициализировать статический класс при запуске приложения "автоматически"? Под автоматически я имею в виду без необходимости ссылки на свойство.
Причина, по которой я хочу сделать это, заключается в том, что я хочу автоматически запускать тему приложения при запуске.
Вот короткий фрагмент:
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
заставит статический конструктор выполнить.