锁定老帖子 主题:C#静态变量的诡异与恶心
精华帖 (0) :: 良好帖 (2) :: 新手帖 (2) :: 隐藏帖 (2)
|
|
---|---|
作者 | 正文 |
发表时间:2009-01-16
或许有人觉得递归到内存溢出或者死锁更合理
|
|
返回顶楼 | |
发表时间:2009-01-16
最后修改:2009-01-16
无语,这种基础问题也上升到怀疑anders水准的高度。
|
|
返回顶楼 | |
发表时间:2009-01-18
mooniscrazy 写道 无语,这种基础问题也上升到怀疑anders水准的高度。 貌似anders不是此问题的始作俑者吧,怀疑不到他老人家的头上。另外我下面的回复,已经说明我自己最初的态度跟帖子本身有差别了,但是我绝不会把帖子给改了,所以请讨论问题本身。没有问题就请路过吧。所谓好读书不求甚解,静态这种东西,现在也没有心思去琢磨。本意是抛砖引玉,自己抛了次砖,所以也不怕别人向我抛几次砖。 另外我觉得“递归到内存溢出或者死锁”,也许真的合理一点,可以防止程序员这么交叉使用,用某种规定来避免,似乎太技巧化了。 |
|
返回顶楼 | |
发表时间:2009-01-22
与语言无关。一切运行在冯诺依曼结构的计算机上的程序,数据(变量)总得存在一个地方,如内存、寄存器等,那么,从物理存储方式来说,一个字节,我们只能确定他的每一个bit是0还是1,并不存在一个bit不是0也不是1——一个字节的所有bit都定了,这个字节的值也就定了。也就是说,你定义了一个变量,没办法,不能只有地址没有值。
我们实际上定义不了一个没有值的变量。高级语言也避免不了这个问题,不过增加了一些限制或默认措施来解决这个问题:原生类型的默认值,高级类型的初始化…… |
|
返回顶楼 | |
发表时间:2009-01-25
自己好好跟踪一下代码的执行过程就行了。恕我直言,lz恐怕根本就没有多少编程经验。这段代码并不复杂,稍有经验的程序员(不管是java还是c#)都应该可以正确的预测代码的执行结果。静态构造函数,就是该类静态成员第一次被访问的时候执行,类的所有内存,初始值都是0。理解了这点,就可以正确的预测结果了。
不是老讲这个诡异那个恶心之类的废话。起码,先把东西搞懂了再发表评论不迟。 lz之所以惊诧,就是因为不理解静态构造函数的原理,所以大惊小怪,以为发现了什么了不得的bug。其实,任何带静态构造函数的编程语言都是这样设计的。 |
|
返回顶楼 | |