何时分配类型?

Pro*_*123 3 c#

所以,我最近一直在学习C#,但有一点我无法弄清楚或找到答案:

考虑一下:

class Class1 {
    int myInt = 32;
}
Run Code Online (Sandbox Code Playgroud)

还有这个:

class Class1 {
    int myInt;

    public Class1(){
        myInt = 32;
    }
}
Run Code Online (Sandbox Code Playgroud)

我只想知道何时以及为什么我应该使用一种方法来分配或实例化值.

Eri*_*ert 11

首先,当初始化需要显式或隐式地引用"this"时,必须在ctor中初始化:

class C
{
    int x = MakeX();  
    int MakeX() { whatever } 
}
Run Code Online (Sandbox Code Playgroud)

这是非法的,因为调用是隐含的this.MakeX(),你还没有运行ctor,所以使用它可能是错误的this. 这是合法的:

class C
{
    int x;
    int MakeX() { whatever }
    public C() { this.x = this.MakeX(); } 
}
Run Code Online (Sandbox Code Playgroud)

因为很明显我们不能限制this 在ctor身体本身的使用.

另请注意,字段初始值设定项按从大多数派生到最少派生的顺序运行首先运行.基类构造函数按从最少派生到最多派生第二运行的顺序运行.这很重要,但无论如何都要知道.

一般来说,建议只是"保持一致".不要使用初始化程序初始化某些字段,而使用ctor正文中的语句初始化一些字段; 选择一个,并始终如一地做.