2009-07-29 75 views
17

在Java中我可以這樣寫:Java中靜態{...}的c#等價物是什麼?

public class Foo { 

    public static Foo DEFAULT_FOO; 

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

    public Foo() { 
    } 

    void init() { 
     // initialize 
    } 
} 

我怎樣才能獲得在C#中(其中靜態成員在使用前進行初始化)相同functionailty?而且,如果這是一件不好的事情,那麼更好的方法是什麼?

回答

33

使用靜態構造函數,像這樣:

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

這裏的more info

底線:這是一個無參數的構造函數,其中附加了static關鍵字。就像Java中的靜態塊一樣工作。

編輯:還有一件事要提。如果你只是想靜態構造一些東西,你可以靜態地初始化一個變量而不需要靜態構造函數。例如:

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

記住,如果你想調用靜態初始化期間在酒吧的任何方法,你需要一個靜態構造函數,所以你的例子調用Foo.Init()仍然需要一個靜態構造函數。我只是說'你不是有限的,就是一切。 :)

+0

哇!感謝非常快速的回覆 – 2009-07-29 18:05:50

3

靜態仍然在C#中的關鍵字:

public class Foo { 
    public static Foo DefaultFoo; 

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

    public Foo() { 
    } 

    void init() { 
     // initialize 
    } 
} 
相關問題