public class Test
    {
        /// <summary>
        /// 静态字段初始化器会在调用静态构造器前运行。
        /// 如果类型没有静态构造器,字段会在类型被使用前或运行时中更早的时间进行初始化.
        /// 静态字段初始化器按照字段声明的先后顺序运行。
        /// </summary>
        public static int X = Y;//静态字段初始化器
        public static int Y = 3;//静态字段初始化器
        public static int Z = 6;//静态字段初始化器
        public static int ZX = Z;//静态字段初始化器
        /// <summary>
        /// 静态构造器,一个类型只能定义一个静态构造器,名称必须和类名相同,且没有参数。
        /// 运行时将在类型使用之前调用静态构造器,以下两种行为可以触发静态构造器执行:
        /// ·实例化类型
        /// ·访问类型的静态成员
        /// </summary>
        static Test()
        {
            Console.WriteLine("Test Type Initialized");
        }
        public Test()
        {
            Console.WriteLine("This is Initalize function");
        }
    }

    class ProgramA
    {
        static void Main()
        {
            Test t = new Test();
            Console.WriteLine("X is "+Test.X);
            Console.ReadLine();
        }
    }

OUTPUT:

Test Type Initialized
This is Initalize function
X is 0

输出结果正证实了:静态构造器只会执行一次。

class ProgramA
    {
        static void Main()
        {
            Console.WriteLine("Z is " + Test.Z);
            Console.WriteLine("ZX is "+Test.ZX);
            Console.ReadLine();
        }
    }

output:

Test Type Initialized
Z is 6
ZX is 6

输出结果正证实了:静态字段初始化器是按照顺序进行的。

class Foo
    {
        /// <summary>
        /// 静态字段初始化器按照声明顺序运行
        /// </summary>
        public static Foo Instance = new Foo();
        public static int X = 3;
        Foo()
        {
            Console.WriteLine(X);
   }
    }


    class ProgramA
    {
        static void Main()
        {
            //静态字段初始化器在类型使用前就运行,所以首先是运行Instance,
            //而Instance正好调用了实例构造函数,而实例构造函数打印X,而此时,
            //X还没有赋值,所以打印出0,而后,才初始化X为3,再在Main()函数中打印出X,即3
            Console.WriteLine(Foo.X);
            Console.ReadLine();
        }
    }

output:

0
3

原文地址:http://www.cnblogs.com/johnyang/p/16884236.html

1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长! 2. 分享目的仅供大家学习和交流,请务用于商业用途! 3. 如果你也有好源码或者教程,可以到用户中心发布,分享有积分奖励和额外收入! 4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解! 5. 如有链接无法下载、失效或广告,请联系管理员处理! 6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需! 7. 如遇到加密压缩包,默认解压密码为"gltf",如遇到无法解压的请联系管理员! 8. 因为资源和程序源码均为可复制品,所以不支持任何理由的退款兑现,请斟酌后支付下载 声明:如果标题没有注明"已测试"或者"测试可用"等字样的资源源码均未经过站长测试.特别注意没有标注的源码不保证任何可用性