悟道人生

渴望闲云野鹤的生活,面对自然,鸟鸣虫唱,星辰为伴,没有拘束,没有苦恼,有的只是神仙般的生活

  :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: :: 管理 ::

首先,先看一张结论表

If(有类显式静态构造函数)
{
If(有访问静态成员)
{
在进入Main函数之后,第一次访问静态成员之前,先调用静态构造函数,以后将不再调用静态构造函数,同一个静态构造函数最多只能调用一次。
}
Else
{
不调用该类静态构造函数
}
}
Else
{
If(有访问静态成员)
{
在执行Main函数中的代码之前,先调用静态构造函数,以后将不再调用静态构造函数,同一个静态构造函数最多只能调用一次。
}
Else
{
不调用该类静态构造函数
}
}

1.下面先来验证一下上面的结论

public class Class_1
    {
        public static int i;
        static Class_1()   //显式定义静态构造函数
        {
            Console.WriteLine("Class_1:显示定义了静态构造函数");
            i = 1;
        }
    }

    public class Class_2
    {
        public static int i = Init(2);  //没有显式定义静态构造函数
        public static int Init(int j)
        {
            Console.WriteLine("Class_2:没有显示定义了静态构造函数");
            return j;
        }
    }

    public class MainClass
    {
        static void Main()
        {
            //分别分析以下几种情况的结果
        }
   }

1. 显示定义了静态构造函数,且有访问静态成员

static void Main()
{
///1.显示定义静态构造函数 2.有访问Class_1中的静态成员i
Console.WriteLine("Start In Main:");
Console.WriteLine(Class_1.i);
}

结果如下:

Start In Main:
Class_1:显示定义了静态构造函数
1
2. 显示定义了静态构造函数,且没有访问静态成员
static void Main()
{
///1.显示定义静态构造函数 2.没有访问Class_1中的静态成员i
Console.WriteLine("Start In Main:");
}

结果如下:
Start In Main:
3. 没有显示定义了静态构造函数,且有访问静态成员
static void Main()
{
///1.没有显示定义静态构造函数 2.有访问Class_2中的静态成员i
Console.WriteLine("Start In Main:");
Console.WriteLine(Class_2.i);
}
结果如下:
Class_2:没有显示定义了静态构造函数
Start In Main:
2
4.没有显示定义静态构造函数,且没有访问静态成员
static void Main()
{
///1.没有显示定义静态构造函数 2.没有访问Class_2中的静态成员
Console.WriteLine("Start In Main:");
}
结果如下:
Start In Main:

 参考资料:

  1.关于Type Initializer和 BeforeFieldInit的问题,看看大家能否给出正确的解释(http://www.cnblogs.com/artech/archive/2008/11/01/1324280.html)

      2.通过七个关键编程技巧得益于静态内容(http://www.microsoft.com/china/MSDN/library/enterprisedevelopment/softwaredev/us0501StaticsinNET.mspx?mfr=true)

      3.静态构造函数的执行时机(http://www.cnblogs.com/happyhippy/archive/2007/04/04/710936.html)

      4.品味细节,深入.NET的类型构造器(http://www.cnblogs.com/anytao/archive/2008/11/02/must_net_23.html)

posted on 2011-03-17 13:14  凌风有约  阅读(413)  评论(0编辑  收藏  举报