【问题标题】:what is the c# equivalent of static {...} in Java?Java中静态{...}的c#等价物是什么?
【发布时间】:2009-07-29 18:01:38
【问题描述】:

我可以用 Java 编写:

public class Foo {

    public static Foo DEFAULT_FOO;

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

    public Foo() {
    }

    void init() {
        // initialize
    }
}

如何在 C# 中获得相同的功能(静态成员在使用前被初始化)?而且,如果尝试这样做是一件坏事,还有什么更好的方法?

【问题讨论】:

    标签: c# java static


    【解决方案1】:

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

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

    这里是more info

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

    编辑:还要提一件事。如果你只是想静态构造一些东西,你可以静态初始化一个变量,而不需要静态构造函数。例如:

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

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

    【讨论】:

    • 哇!感谢您的快速回复
    【解决方案2】:

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

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

    【讨论】:

    • 这不能在 C# 中编译。您需要() 行中的static Foo() {...}
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-03-14
    • 1970-01-01
    • 1970-01-01
    • 2010-12-07
    • 2010-11-22
    相关资源
    最近更新 更多