5

是否可以初始化應用程序中的靜態類「自動啓動」?通過自動我的意思是不需要引用一個屬性。隱式初始化靜態類

我希望能夠做到這一點的原因是,我想自動啓動主題的應用程序。

這裏是一個簡短的片斷:

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

'DefaultTheme'也需要是靜態的,否則會出現編譯器錯誤。 –

+0

@ p.s.w.g是的,在片段中錯過了,抱歉。 – pikausp

+0

您似乎以遞歸方式調用'DefaultTheme'屬性,並且您需要屬性的右括號。 –

回答

5

是否可以初始化應用程序上的靜態類「自動」啓動?我自動意味着不需要引用一個屬性。

保證靜態構造函數執行的唯一方法是以某種形式使用該類型。它不一定需要引用一個屬性(它可能是構造一個實例,使用方法等),但是您確實需要使用該類型。靜態構造函數可能永遠不會運行。

您的當前選項或其變體似乎是最佳解決方案。你可以改變這種具有單一通話,如:

Settings.InstallDefaultTheme(); 

如果你喜歡,因爲Settings參考將迫使靜態構造函數來執行。

+0

好的,我會跟着去的,謝謝里德 – pikausp