zoukankan      html  css  js  c++  java
  • C#中静态变量的何时初始化

    引用自http://blog.csdn.net/dql1982/archive/2007/12/04/1916559.aspx

    类的静态字段变量初始值设定项对应于一个赋值序列,这些赋值按照它们在相关的类声明中出现的文本顺序执行。如果类中存在静态构造函数则静态字段初始值设定项的执行在该静态构造函数即将执行前发生。否则,静态字段初始值设定项在第一次使用该类的静态字段之前先被执行,但实际执行时间依赖于具体的实现。在以下示例中:

    using System;
    class Test 

    static void Main() {
         Console.WriteLine(
    "{0} {1}", B.Y, A.X);
    }

    public static int F(string s) {
         Console.WriteLine(s);
         
    return 1;
    }

    }

    class A
    {
    public static int X = Test.F("Init A");
    }

    class B
    {
    public static int Y = Test.F("Init B");
    }
    或者产生如下输出:
    Init A
    Init B
    1 1
    或者产生如下输出:
    Init B
    Init A
    1 1
    这是因为 X 的初始值设定项和 Y 的初始值设定项的执行顺序无法预先确定,上述两种顺序都有可能发生;唯一能够确定的是:它们一定会在对那些字段的引用之前发生。但是,下面的示例:
    using System;
    class Test
    {
    static void Main() {
         Console.WriteLine(
    "{0} {1}", B.Y, A.X);
    }

    public static int F(string s) {
         Console.WriteLine(s);
         
    return 1;
    }

    }

    class A
    {
    static A() {}
    public static int X = Test.F("Init A");
    }

    class B
    {
    static B() {}
    public static int Y = Test.F("Init B");
    }

    所产生的输出必然是:
    Init B
    Init A
    1 1
      这是因为关于何时执行静态构造函数的规则规定B的静态构造函数以及B的静态字段初始值设定项必须在A的静态构造函数和字段初始值设定项之前运行。
  • 相关阅读:
    SGU180 Inversions(树状数组求逆序数)
    HDU 1465(错排公式)
    CodeForces 580B(尺取法)
    Entertainment Box Gym100781E(数据结构+贪心)
    Sort HDU5884(二分+多叉哈夫曼树)
    P3808 【模板】AC自动机(简单版)
    Coefficient Computation (大整数、Java解决)
    Chat Group gym101775A(逆元,组合数)
    等和的分割子集--01背包问题
    蓝桥杯手链样式
  • 原文地址:https://www.cnblogs.com/malaikuangren/p/1323812.html
Copyright © 2011-2022 走看看