繁体   English   中英

C#:类中的静态对象变量

[英]C#: static object variable in class

如果我在类中有一个静态变量:

public class MyClass {
    private static MyObject = new MyObject();
    public void MyMethod() {
        // do some stuff
    }
}

变量在声明时是否可以实例化,如上所述?

您的代码合法且有效。

需要注意的一点是静态构造函数和初始化程序在模块加载时不会运行,但仅在需要时运行。
只有在创建MyClass实例或访问其静态字段时,才会实例化MyObject。

10.5.5.1静态字段初始化
类的静态字段变量初始值设定项对应于以它们出现在类声明中的文本顺序执行的赋值序列。 如果类中存在静态构造函数(第10.12节),则在执行该静态构造函数之前立即执行静态字段初始值设定项。 否则,静态字段初始化器在第一次使用该类的静态字段之前的实现相关时间执行。

封闭类类型的静态构造函数在给定的应用程序域中最多执行一次。 静态构造函数的执行由应用程序域中发生的以下第一个事件触发:
·创建类类型的实例。
·引用类类型的任何静态成员。

据我所知:

  • 如果没有静态构造函数,则调用静态方法可能会触发初始化程序,但如果静态方法不使用静态字段,则不需要这样做。
  • 如果有静态构造函数,它必须在引用静态成员时运行,因此调用静态方法首先触发静态字段初始化器,然后触发静态构造函数。

是。 需要注意的两件事:

  1. 静态变量将按它们在类中出现的顺序进行初始化。
  2. 保证在调用任何静态构造函数之前初始化它们。

C#规范的第10.5.5.1节详细介绍了您感兴趣的内容。

如果你问这是否合法C#,那么是的。 它会做你认为会做的事情。

暂无
暂无

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

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