• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

C#类中静态变量静态构造函数执行顺序

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

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

 例子代码:

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

 

 

 

 

鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
C++STL下载和安装发布时间:2022-07-18
下一篇:
哈夫曼编码的C#实现和简介发布时间:2022-07-18
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap