在Java中我可以写:
public class Foo {
public static Foo DEFAULT_FOO;
static {
DEFAULT_FOO = new Foo();
// initialize
DEFAULT_FOO.init();
}
public Foo() {
}
void init() {
// initialize
}
}
如何在C#中获得相同的功能(静态成员在使用前初始化)?并且,如果尝试这样做是件坏事,那么更好的方法是什么?
答案 0 :(得分:38)
你使用静态构造函数,如下所示:
public class Foo
{
static Foo()
{
// inits
}
}
这是more info。
底线:它是一个无参数的构造函数,附加了static
关键字。就像Java中的静态块一样工作。
编辑:还有一件事需要提及。如果你只想静态地构造一些东西,你可以静态初始化一个变量,而不需要静态构造函数。例如:
public class Foo
{
public static Bar StaticBar = new Bar();
}
请记住,如果要在静态初始化期间调用Bar上的任何方法,则需要静态构造函数,因此调用Foo.Init()
的示例仍需要静态构造函数。我只是说'你没有限制,就是全部。 :)
答案 1 :(得分:3)
静态仍然是C#中的关键字:
public class Foo {
public static Foo DefaultFoo;
static Foo {
DefaultFoo = new Foo();
// initialize
DefaultFoo.init();
}
public Foo() {
}
void init() {
// initialize
}
}