繁体   English   中英

C# - 每次初始化类时是否初始化类的静态属性?

[英]C# - Are Static Properties of a Class Initialised Every Time that Class is Initialised?

我目前正在查看一些旧代码,并且遇到了一个使用私有静态属性的类,该属性是使用默认值创建的并且从未修改过; 像这样的 -

public class Foo
{
    private static readonly string ConnectionString = ConfigurationManager.ConnectionStrings["SqlConnection"].ToString();

    public Bar GetBar(int barId)
    {
        // get bar using "ConnectionString" above
    }
}

所以我的问题是ConnectionString是静态的有什么好处吗? 即是ConfigurationManager.ConnectionStrings["SqlConnection"].ToString(); 每次运行new Foo()时运行,从而使属性的静态值变得多余,因为它在每次初始化类时都会被覆盖?

静态字段在该类的第一个对象被实例化时初始化一次,而不是每次创建对象时。 这使它们相对高效。

然而,这样做也有一个缺点,那就是实例级的构造函数被装饰了一个状态机,它可以判断一次性初始化是否已经完成。

当创建类的第一个对象时,静态构造函数将在任何其他代码在实例级别执行之前被调用。 对于后续的实例化,这一步将被跳过,因为类已经被初始化了。

这个额外的代码是在编译期间生成的,它使每个实例级构造函数比没有静态成员时慢一点。

不, 静态成员仅在您的程序中首次引用类之前初始化一次,并且在应用程序域的生命周期内保留在内存中。

但在这种情况下,该字段是多余的,因为ConfigurationManager无论如何都会缓存该值,因此不会在您每次访问它时都从配置文件中读取它。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM