当前位置: 首页 > 编程语言 > C#

使用静态构造函数(JonSkeetBrainteaser)分享

时间:2023-04-11 02:59:52 C#

使用静态构造函数(JonSkeetBrainteaser)代码。我正在查看JonsBrainteasers之一(问题#2),我的输出与答案不同。这导致我在这里询问最近版本是否发生了某些变化,并查看其他人从这段代码中得到了什么输出。问题是,“将展示什么,为什么,你有多自信?”使用系统;classFoo{staticFoo(){Console.WriteLine("Foo");}}类Bar{staticinti=Init();staticintInit(){Console.WriteLine("Bar");返回0;}}classTest{staticvoidMain(){Foof=newFoo();酒吧b=新酒吧();什么,如果有的话会给我们两个不同的答案?现在在调试器之外的发布模式下尝试它;-p有/没有调试器我得到不同的结果。调试器打破了许多微妙的细微差别/优化,所以我只能猜测这是调试器重要的时刻之一。这使调试变得更加困难;-pJon自己的答案页面对此进行了讨论。我不是C#的人,但似乎系统只有一个选择何时调用静态foo代码(因此写“Foo”),但它基本上有无限的自由来决定何时初始化Bar.i(在哪里写"Bar"),所以它可能在加载类时发生,或者在第一次使用时发生,或者根本不发生。它在调试模式下打印Foo,Bar,在发布模式下打印Bar,Foo。所以发生的事情是发布的代码被优化,并且优化导致Bar首先被调用-但不能保证总是如此。只是看着它,如果它显示的不是“FooBar”,我会感到惊讶。为了简单起见,您首先访问Foo,因此它的静态构造函数将运行。实例化Bar时遵循静态字段初始化器。很高兴得到纠正。我以为foobar会被打印出来。静态类型构造函数将首先在Foo中执行,然后将在Bar类上调用Init方法。我不知道这种行为是否会改变。这很有趣。以上就是C#学习教程:使用静态构造函数(JonSkeetBrainteaser)的全部内容分享。如果对你有用,需要进一步了解C#学习教程,希望大家多多关注。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: