问题
我最近一直在用C#和Java编程,我很好奇最好的地方是初始化我的类字段。
我应该在申报时做到吗?:
public class Dice
{
private int topFace = 1;
private Random myRand = new Random();
public void Roll()
{
// ......
}
}
或者在构造函数中?:
public class Dice
{
private int topFace;
private Random myRand;
public Dice()
{
topFace = 1;
myRand = new Random();
}
public void Roll()
{
// .....
}
}
我真的很好奇你们有些人认为最好的做法。我想保持一致并坚持一种方法。
#1 热门回答(242 赞)
我的规则:
不要使用声明中的默认值进行初始化(null,false,0,0.0 ...)。
如果你没有更改字段值的构造函数参数,则首选声明中的初始化。
如果由于构造函数参数而改变字段的值,则将初始化放在构造函数中。
在练习中保持一致(最重要的规则)。
#2 热门回答(133 赞)
在C#中没关系。你提供的两个代码示例完全相同。在第一个例子中,C#编译器(或它是CLR?)将构造一个空构造函数并初始化变量,就像它们在构造函数中一样。如果已经有一个构造函数,那么任何初始化"上面"将被移动到它的顶部。
就最佳实践而言,前者比后者更不容易出错,因为有人可能很容易添加另一个构造函数而忘记链接它。
#3 热门回答(13 赞)
C#的语义与Java略有不同。在C#中,声明中的赋值是在调用超类构造函数之前执行的。在Java中,它立即完成,允许使用'this'(对于匿名内部类特别有用),并且意味着两个表单的语义确实匹配。
如果可以,请将字段设为最终字段。