在C#中初始化静态变量和静态构造函数的差别?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (51)

我想知道初始化静态成员内联之间有什么区别,如下所示:

class Foo
{
    private static Bar bar_ = new Bar();
}

或者在静态构造函数中初始化,如下所示:

class Foo
{
    static Foo()
    {
        bar_ = new Bar();
    }
    private static Bar bar_;
}
提问于
用户回答回答于

如果你的类型中有静态构造函数,则由于beforefieldinit标志不再被应用,它会改变类型初始化。

它也影响初始化顺序 - 变量初始化器都在静态构造函数之前执行。

就我所知是这样。

用户回答回答于

在这种情况下,我不认为有任何实际的区别。如果你在初始化静态变量时需要一些逻辑——就像你想在不同的条件下使用不同的具体类型的接口一样 ——可以使用静态构造函数。

class Foo
{
    private static IBar _bar;

    static Foo()
    {
        if(something)
        {
            _bar = new BarA();
        }
        else
        {
            _bar = new BarB();
        }
    }
}

扫码关注云+社区