2009-07-29 34 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 
    } 
} 
相关问题