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的静态构造函数和字段初始值设定项之前运行。
  • 相关阅读:
    Excel的小游戏总结
    借助“URLScan”工具隐藏header头服务器信息
    WinCe设备连接Win10系统
    WinForm 通过HttpWebRequest实现大文件上传
    Sql 动态行转列 pivot
    C# 调用LAKALA接口获取静态二维码数据
    蜗牛星际黑群晖硬盘休眠的设置
    GIT Windows服务端搭建笔记
    C#通过socket判断FTP服务器是否通畅并判断用户名密码是否正确
    C#获取MAC地址
  • 原文地址:https://www.cnblogs.com/malaikuangren/p/1323812.html
Copyright © 2011-2022 走看看