






















class Class1
{
[STAThread]
static void Main(string[] args)
{
System.Console.WriteLine(anobject== null);
System.Console.WriteLine("程序开始");
}
static Class1()
{
System.Console.WriteLine("静态构造函数调用");
}
static readonly object anobject = new object();
}
单步调试得出结论:静态成员初始化在静态构造函数之前,静态构造函数调用在静态方法前,而静态成员初始化又是在什么时候调用的呢?
class Class1
{
[STAThread]
static void Main(string[] args)
{
System.Console.WriteLine(anobject== null);
System.Console.WriteLine("程序开始");
Class2 c2 = new Class2();
c2.Do();
Class2.StaticDo();
}
static Class1()}
public void Do()再次跟踪调试。顺序如下,类被首次提到(实例化或调用静态对象/方法)时开始执行类的静态成员初始化,初始化后如果存在静态构造函数则调用静态构造函数,之后进行相应操作。
那么多个静态成员按什么顺序初始化呢
public static object Something3 = new object();
public static object Something1 = new object();
public static object Something2 = new object();
顺序3-1-2,也就是编译顺序
这个顺序不知道会不会因为调用有所改变
public class Class2
{
public static object Something3 = Something1;
public static object Something1 = new object();
public static object Something2 = new object();
}class Class1
{
[STAThread]
static void Main(string[] args)
{
System.Console.WriteLine(Class2.Something3 == null);
}
}
结果Something3的值为null,也就是说不会因为先调用而先初始化。
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。