仅在方法中声明,但声明如何?

时间:2010-10-05 17:14:06

标签: c# syntax methods

在MSDN上,我发现:

  

在C#中,每个执行的指令都是在方法的上下文中完成的。

但我也读到int A=5;语句可以在类体中。它似乎不在方法体中,为什么这可能呢?这可能只是术语混乱,但我想知道。

3 个答案:

答案 0 :(得分:8)

阿德里安是对的。进一步澄清:“int A = 5;”它只是在方法体内时的声明。当它在方法体外部时,它是一个带有初始化器的字段声明,它在逻辑上被移动到构造函数体中。

初始化程序如何工作的确切语义有点棘手。有关这方面的一些想法,请参阅:

http://blogs.msdn.com/b/ericlippert/archive/2008/02/15/why-do-initializers-run-in-the-opposite-order-as-constructors-part-one.aspx

http://blogs.msdn.com/b/ericlippert/archive/2008/02/18/why-do-initializers-run-in-the-opposite-order-as-constructors-part-two.aspx

答案 1 :(得分:6)

class Example
{
    int A = 5;
}

等于

class Example
{
    int A;

    public Example()
    { 
        A = 5;
    }
}

所以赋值仍然是方法(构造函数)的一部分。

答案 2 :(得分:1)

您可能是指字段初始化:

class Foo
{
    private static int i = 5;
}

即使这条指令也在方法的上下文中运行。在这种特殊情况下,它是静态构造函数。如果该字段不是静态的,那么它将是正常的构造函数。