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

C#static

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

 

 

上面的代码是一个网友告诉我的,让我看看结果,我看了一眼马上说结果是   
  i=1   
  j=1   
  网友运行后说结果是   
  i=0   
  j=1   
  我吓了一跳,认真看了代码,原来自己真的错了。   
  下面我解释一下为什么是后一种结果   
  对一个类来说,static变量是与对象无关的,那么它们什么时候被初始化呢?就是在第一次引用的时候。当类生成对象的时候,可以简单分成3步   
  1,为所有static变量分配内存,这个时候内存里面的值是该变量类型的缺省值。关于不同值类型的缺省值大家可以去查相关资料,注意值类型和引用类型是不同的。   
  2,为static变量赋值,同样要注意值类型和引用类型是不同的。   
  3,生成对象,调用构造函数,先调用这个类的父类的构造函数,然后调用类本身的构造函数,生成对象。   
  现在分析上面的代码:   
  Console.WriteLine(string.Format("i={0}",i));这里i是static变量,而且类class1是第一次被引 用,按照上面说的三步,要先为class1里面所有的static变量分配内存。尽管现在有超线程技术,但是指令在逻辑还是一条一条的按顺序执行的,所以 先为static   int   i分配内存,并且在该内存中保持int的缺省值0,接着再为static   int   num   变量分配内存,值当然也为0。   
  然后执行第二步,为变量赋值:先为static   int   i变量赋值,i=getNum(),看getNum里面的代码,就是return   num,这个时候num的值是0,于是i就为0了。然后对变量num赋值,num=1;这行代码执行后,num就为1了。分析到这里我就不继续分析了,大 家很容易看出结果是什么。   
    


鲜花

握手

雷人

路过

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

请发表评论

全部评论

专题导读
上一篇:
c# 发邮件的代码发布时间:2022-07-10
下一篇:
c# 日期字符格式化发布时间:2022-07-10
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

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

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

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