如果我在类中有静态变量:
public class MyClass {
private static MyObject = new MyObject();
public void MyMethod() {
// do some stuff
}
}
变量在声明时是否可以实例化,如上所述?
答案 0 :(得分:6)
您的代码合法且有效。
需要注意的一点是,静态构造函数和初始化程序在加载模块时不会运行,但仅在需要时才运行。
只有在创建MyClass实例或访问其静态字段时才会实例化MyObject。
10.5.5.1静态字段初始化
类的静态字段变量初始值设定项对应于以它们出现在类声明中的文本顺序执行的赋值序列。如果类中存在静态构造函数(第10.12节),则在执行该静态构造函数之前立即执行静态字段初始值设定项。否则,静态字段初始值设定项在首次使用该类的静态字段之前的实现相关时间执行。封闭类类型的静态构造函数在给定的应用程序域中最多执行一次。静态构造函数的执行由应用程序域中发生的以下第一个事件触发:
·创建类类型的实例 ·引用类类型的任何静态成员。
据我所知:
答案 1 :(得分:4)
是。需要注意的两件事:
C# spec的第10.5.5.1节详细介绍了您感兴趣的内容。
答案 2 :(得分:1)
如果你问这是否是合法的C#,那么是的。它会做你想象的那样。