2009-07-29 14 views
17

は私が書くことができます:Javaの静的{...}と同じC#は何ですか? Javaでは

public class Foo { 

    public static Foo DEFAULT_FOO; 

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

    public Foo() { 
    } 

    void init() { 
     // initialize 
    } 
} 

私は(静的メンバーは使用前に初期化されている)C#で同じfunctionailtyを取得できますか?そして、これが悪いことであれば、よりよいアプローチは何ですか?

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

ここmore infoだ:

答えて

33

あなたは、このように、静的コンストラクタを使用します。

ボトムライン:staticキーワードが付いたパラメタなしコンストラクタです。 Javaの静的ブロックと同じように動作します。

編集:もう1つ言及します。静的に何かを構築したいだけなら、静的コンストラクタを必要とせずに静的に変数を初期化することができます。たとえば:

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

はあなたが静的初期化時にバー上の任意のメソッドを呼び出したい場合は、静的コンストラクタが必要なので、まだ静的コンストラクタを必要とFoo.Init()を呼び出すあなたの例だろうに注意してください。私はちょうどあなたが制限されていないと言っている、すべてです。 :)

+0

うわー!信じられないほど迅速な返信をありがとう –

3

静的はまだC#で​​のキーワードです:

public class Foo { 
    public static Foo DefaultFoo; 

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

    public Foo() { 
    } 

    void init() { 
     // initialize 
    } 
} 
関連する問題