zoukankan      html  css  js  c++  java
  • C# 类中静态变量静态构造函数执行顺序

    我们常常在网上看到说我们类中如果有静态变量和静态构造函数,那么先执行静态变量,然后静态函数。但是为什么呢?真的是这样吗?

     例子代码:

    public class BaseClass

        {
            public static int s1 = 10;
            static BaseClass()
            {
                s1 = 11;
            }
        }

    static void Main(string[] args)
    {
    BaseClass.s1 = 5;
    }

     
      

     

    我们定义一个类并调用:我们都知道s1结果是 5;单点调试时

    第一步:BaseClass.s1 = 5;

    第二步: public static int s1 = 10;

    第三步: s1 = 11;

    这样看说先执行先执行静态变量,然后静态函数 好像也没问题。

    我们通过IL言语发现其实不然:

     

    .method private hidebysig specialname rtspecialname static
    void .cctor() cil managed
    {
    // 代码大小 16 (0x10)
    .maxstack 8
    IL_0000: ldc.i4.s 10
    IL_0002: stsfld int32 ConsoleAppTest.BaseClass::s1
    IL_0007: nop
    IL_0008: ldc.i4.s 11
    IL_000a: stsfld int32 ConsoleAppTest.BaseClass::s1
    IL_000f: ret
    } // end of method BaseClass::.cctor

    发现了什么,构造函数中把对 s1 = 10;的赋值放到了构造函数中。

    总结:运行时s1分配内存空间并赋默认值,然后执行构造函数,但是构造函数中静态变量的赋值是有顺序的。先赋值10再11

     

     
  • 相关阅读:
    【poj3764】 The xor-longest Path
    【poj3261】 Milk Patterns
    【poj3237】 Tree
    【bzoj2654】 tree
    【poj3122】 Pie
    【poj1011】 Sticks
    【poj1186】 方程的解数
    【poj2741】 Colored Cubes
    【poj3141】 Distant Galaxy
    【bzoj2456】 mode
  • 原文地址:https://www.cnblogs.com/87700180/p/11865597.html
Copyright © 2011-2022 走看看