[英]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.