所以,我最近一直在学习 C#,但有一件事我无法弄清楚或找到答案:
考虑一下:
class Class1 {
int myInt = 32;
}
还有这个:
class Class1 {
int myInt;
public Class1(){
myInt = 32;
}
}
我只是想知道何时以及为什么应该使用一种方法而不是另一种方法来分配或实例化值。
所以,我最近一直在学习 C#,但有一件事我无法弄清楚或找到答案:
考虑一下:
class Class1 {
int myInt = 32;
}
还有这个:
class Class1 {
int myInt;
public Class1(){
myInt = 32;
}
}
我只是想知道何时以及为什么应该使用一种方法而不是另一种方法来分配或实例化值。
首先,当初始化需要显式或隐式引用“this”时,您必须在 ctor 中进行初始化:
class C
{
int x = MakeX();
int MakeX() { whatever }
}
这是非法的,因为调用是隐含的,this.MakeX()
而你甚至还没有运行 ctor,所以使用this
. 这是合法的:
class C
{
int x;
int MakeX() { whatever }
public C() { this.x = this.MakeX(); }
}
因为显然我们不能限制this
在 ctor 主体本身中的使用。
另请注意,字段初始值设定项按从最多派生到最少派生的顺序运行并首先运行。基类构造函数按照从最少派生到最多派生的顺序运行,然后运行。这很少有关系,但无论如何知道它是有帮助的。
一般来说,建议只是“保持一致”。不要使用初始化器初始化某些字段,而不要使用 ctor 主体中的语句初始化某些字段;选择一个并始终如一地做。
这是您公司的品味或编码标准的问题。
我的经验法则是,如果我的所有构造函数都为变量分配相同的值,我使用第一种形式;如果值来自外部,或者不同的构造函数为变量分配不同的值,我使用第二种形式。
如果您在工业界工作,这主要取决于您的项目的个人偏好或编码约定,即没有“正确”或“错误”的方式来初始化成员变量。最后,重要的是你如何做到这一点是一致的。