所以,我最近一直在学习C#,但有一件事我无法弄清楚或找到答案:
考虑一下:
class Class1 {
int myInt = 32;
}
和此:
class Class1 {
int myInt;
public Class1(){
myInt = 32;
}
}
我只想知道何时以及为什么我应该使用一种方法来分配或实例化值。
答案 0 :(得分:11)
首先,当初始化需要明确或隐含地引用“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(); }
}
因为很明显我们无法限制在{cody body本身中使用this
。
另请注意,字段初始值设定项按从大多数派生到最少派生的顺序运行并首先运行 。基类构造函数按从最少派生到大多数派生的顺序运行,并运行 second 。这很重要,但无论如何都要知道。
一般来说,建议只是“保持一致”。不要使用初始化程序初始化某些字段,而使用ctor正文中的语句初始化一些字段;选择一个,并坚持不懈。
答案 1 :(得分:4)
这是贵公司的品味或编码标准。
我的经验法则是,如果我的所有构造函数都为变量赋值相同,我会使用第一个形式;如果值来自外部,或者不同的构造函数为变量赋值不同,我使用第二种形式。
答案 2 :(得分:2)
如果您在工业中工作,那么主要取决于您的项目的个人偏好或编码约定,即初始化成员变量没有“正确”或“错误”的方式。最后,重要的是你如何做到这一点。