所以,我最近一直在学习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正文中的语句初始化一些字段; 选择一个,并始终如一地做.