Java 中静态 {...} 的 c# 等效项是什么?

2022-09-01 12:58:46

在Java中,我可以写:

public class Foo {

    public static Foo DEFAULT_FOO;

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

    public Foo() {
    }

    void init() {
        // initialize
    }
}

如何在C#中获取相同的函数错误(其中静态成员在使用前初始化)?而且,如果这是一件坏事,那么更好的方法是什么?


答案 1

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

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

下面是详细信息

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

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

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

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


答案 2

Static 仍然是 C# 中的关键字:

public class Foo {
    public static Foo DefaultFoo;

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

    public Foo() {
    }

    void init() {
        // initialize
    }
}

推荐