2009-07-29 4 views
17

In Java kann ich schreiben:Was ist das C# -Aquivalent von statischem {...} in Java?

public class Foo { 

    public static Foo DEFAULT_FOO; 

    static { 
     DEFAULT_FOO = new Foo(); 
     // initialize 
     DEFAULT_FOO.init(); 
    } 

    public Foo() { 
    } 

    void init() { 
     // initialize 
    } 
} 

Wie kann ich die gleiche functionailty in C# erhalten (wo statischen Mitgliedern vor der Verwendung initialisiert werden)? Und wenn das eine schlechte Sache ist zu versuchen, was ist ein besserer Ansatz?

Antwort

33

verwenden Sie einen statischen Konstruktor, wie folgt aus:

public class Foo 
{ 
    static Foo() 
    { 
    // inits 
    } 
} 

more info hier.

Fazit: Es ist ein parameterless Konstruktor mit dem Schlüsselwort static. Funktioniert genau wie der statische Block in Java.

Bearbeiten: Eine weitere Sache zu erwähnen. Wenn Sie nur etwas statisch konstruieren möchten, können Sie eine Variable statisch initialisieren, ohne den statischen Konstruktor zu benötigen. Zum Beispiel:

public class Foo 
{ 
    public static Bar StaticBar = new Bar(); 
} 

Beachten Sie, dass Sie einen statischen Konstruktor benötigen, wenn Sie Methoden auf Bar bei der statischen Initialisierung aufrufen wollen, so dass Ihr Beispiel, dass Anrufe benötigt Foo.Init() noch einen statischen Konstruktor. Ich sage nur, du bist nicht begrenzt, ist alles. :)

+0

Wow! Danke für unglaublich schnelle Antworten –

3

Static ist immer noch das Schlüsselwort in C#:

public class Foo { 
    public static Foo DefaultFoo; 

    static Foo { 
     DefaultFoo = new Foo(); 
     // initialize 
     DefaultFoo.init(); 
    } 

    public Foo() { 
    } 

    void init() { 
     // initialize 
    } 
}