首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >使用静态构造器(Jon Skeet Brainteaser)

使用静态构造器(Jon Skeet Brainteaser)
EN

Stack Overflow用户
提问于 2009-10-30 01:15:57
回答 4查看 3K关注 0票数 18

作为一个相对新手,我会尽可能多地阅读关于某个特定主题的内容,并尽可能多地测试/编写代码。我看着其中一个Jons Brainteasers (问题#2),我的输出与答案不同。这使得我在这里询问在最近的版本中是否有什么变化,并看看其他人从这段代码中得到了什么输出。

问题是,“将展示什么,为什么,以及你有多自信?”

using System;

class Foo
{
    static Foo()
    {
        Console.WriteLine ("Foo");
    }
}

class Bar
{
    static int i = Init();

    static int Init()
    {
        Console.WriteLine("Bar");
        return 0;
    }
}

class Test
{
    static void Main()
    {
        Foo f = new Foo();
        Bar b = new Bar();
    }
}

什么会导致我们得到两个不同的答案?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2009-10-30 01:22:39

现在在发布模式下,在调试器之外尝试它;-p

我使用调试器和不使用调试器得到不同的结果。调试器打乱了许多微妙的细微差别/优化,所以我只能猜测这是调试器很重要的时候之一。这使得调试更加困难;-p

票数 25
EN

Stack Overflow用户

发布于 2009-10-30 01:21:44

Jon自己的answers page讨论了这一点。我不是一个喜欢C#的人,但是系统似乎只有一个选择,什么时候调用静态foo代码(因此写成"Foo"),但它基本上有无限的自由来决定何时初始化Bar.i (它将写成"Bar"),所以它可能发生在装入类的时候,也可能发生在第一次使用它的时候,或者根本不发生。

票数 6
EN

Stack Overflow用户

发布于 2009-10-30 01:21:50

只要看看它,如果它显示的不是"FooBar“,我会很惊讶的。

原因很简单,您首先访问Foo,所以它的静态构造函数将会运行。然后是实例化Bar时的静态字段初始化器。

很高兴被纠正。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1645254

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档