首页 新闻 会员 周边 捐助

静态构造函数一定会在引用任何静态成员之前执行吗?

0
悬赏园豆:10 [已关闭问题] 关闭于 2011-09-26 13:08

看到大家都是这么说,而且我经过简单的验证也是这么回事。但是我没研究过clr底层机制,不知道到底是不是这样,是怎么做到的,会不会万一保证不了。希望有研究过sscli的哥们给从最底层给彻底的解释一下。

我的验证代码:

using System;
using System.Xml;

public class Test
{

public static void Main(string[] args)
{
TestStatic.StaticMethod();
Console.ReadLine();
}
}

public class TestStatic
{
static XmlDocument doc;
static TestStatic()
{
doc
=new XmlDocument();
doc.Load(
"Test.xml");//假设此文件存在,而且是一个良好的xml。
}
public static void StaticMethod()
{
//静态构造函数一定会在此方法调用之前执行吗,下面这句有没有可能因为doc为null而抛出NullReferenceException?
XmlNodeList list= doc.ChildNodes;
}
}

问题补充:

谢谢各位兄弟的回答。不过道理我也明白,而且我写的验证代码也证明了是这样,可是为什么会这样啊,底层机制是怎么实现的,希望知道的兄弟给解释一下。

张少峰的主页 张少峰 | 菜鸟二级 | 园豆:320
提问于:2011-05-19 19:01
< >
分享
所有回答(3)
0

估计是这样的,由于你的方法中,引用的是静态的字段,所以最先在静态构造里面进行

程序诗人 | 园豆:313 (菜鸟二级) | 2011-05-19 23:06
0

我认为这就是  .net 的 一个固定的执行过程吧。也就是 编写者的一个约定,知道就可以了

慧☆星 | 园豆:5722 (大侠五级) | 2011-05-20 09:31
0

1.程序中的主类的静态变量会在main方法执行之前初始化

2.静态对象(变量)在非静态对象前初始化。

3.就算你不创建对象,只是访问类中静态变量,该类中的所有的静态变量也要按顺序初始化。

建议你在研究一下有超类的情况下,你会发现不管如何都是静态变量先初始化。

活动的细胞 | 园豆:240 (菜鸟二级) | 2011-05-20 12:07
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册