5

ist es möglich, eine statische Klasse auf app starten „automatisch“ zu initialisieren? Mit automatisch meine ich ohne die Notwendigkeit, eine Eigenschaft zu referenzieren.initialisieren statische Klasse implizit

Der Grund möchte ich in der Lage sein zu tun, für die ist, dass ich eine App automatisch Thema beim Start möchten.

Hier ist ein kurzer Ausschnitt:

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

Ich weiß, ich kann (und das ist, wie es im Moment ist) mit Original-Getter/Setter gehen und

ThemeManager.SetTheme(Settings.DefaultTheme); 

in Konstruktor von App aufrufen (es ist WPF-Projekt) und es wird die Arbeit tun, zumindest aus meiner Sicht (korrigieren Sie mich, wenn ich mich bitte täusche), würde es mehr Sinn für das Standard-Thema zutreffen, ohne dass es explizit angegeben werden muss .

+1

'DefaultTheme' auch statisch sein müssen, oder Sie einen Compiler-Fehler erhalten. –

+0

@ p.s.w.g Ja, verpasste das im Schnipsel, tut mir leid. – pikausp

+0

Sie scheinen die 'DefaultTheme' -Eigenschaft rekursiv aufzurufen, und Sie benötigen eine schließende Klammer für die Eigenschaft. –

Antwort

5

Ist es möglich, eine statische Klasse beim Start der App "automatisch" zu initialisieren? Mit automatisch meine ich, ohne auf eine Eigenschaft verweisen zu müssen.

Die einzige Möglichkeit zu garantieren, dass der statische Konstruktor ausgeführt wird, besteht darin, den Typ in irgendeiner Form zu verwenden. Es muss nicht unbedingt auf eine Eigenschaft verwiesen werden (es kann eine Instanz erstellt werden, eine Methode verwendet werden usw.), aber Sie müssen den Typ verwenden. Es ist möglich, dass der statische Konstruktor niemals anders läuft.

Ihre aktuelle Option, oder eine Variation davon, scheint die beste Lösung zu sein. Sie können dies ändern, um einen einzigen Anruf wie zu haben:

Settings.InstallDefaultTheme(); 

Wenn Sie es vorziehen, da die Referenz von Settings den statischen Konstruktor auszuführen zwingen würde.

+0

Ok ok, ich damit gehen würde, danke Reed – pikausp

Verwandte Themen