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#中获得相同的function(静态成员在使用前初始化)? 并且,如果尝试这样做是件坏事,那么更好的方法是什么?

你使用静态构造函数,如下所示:

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

这是更多信息 。

底线:它是一个无命名的构造函数,附加了static关键字。 就像Java中的静态块一样工作。

编辑:还有一件事要提。 如果您只想静态构造某些东西,则可以静态初始化变量而无需静态构造函数。 例如:

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

请记住,如果要在静态初始化期间调用Bar上的任何方法,则需要静态构造函数,因此调用Foo.Init()示例仍需要静态构造函数。 我只是说’你不是有限的,就是全部。 🙂

静态仍然是C#中的关键字:

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