为了账号安全,请及时绑定邮箱和手机立即绑定

在构造函数或声明中初始化类字段?

在构造函数或声明中初始化类字段?

慕的地6264312 2019-06-17 15:18:46
在构造函数或声明中初始化类字段?我最近一直在用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()     {         // .....     }}我真的很好奇你们中的一些老兵认为什么是最好的做法。我想保持一致,坚持一种方法。
查看完整描述

3 回答

?
阿波罗的战车

TA贡献1862条经验 获得超6个赞

在C#中,这并不重要。您给出的两个代码示例完全等价。在第一个示例中,C#编译器(还是CLR?)将构造一个空构造函数并初始化变量,就像它们在构造函数中一样(JonSkeet在下面的注释中解释了其中的细微差别)。如果已经有一个构造函数,那么“上面”的任何初始化都将移到它的顶部。

就最佳实践而言,前者比后者更容易出错,因为有人可以轻松地添加另一个构造函数,而忘记将其链接起来。


查看完整回答
反对 回复 2019-06-17
?
喵喵时光机

TA贡献1846条经验 获得超7个赞

这里,C#的语义与Java略有不同。在C#中,声明中的赋值在调用超类构造函数之前执行。在Java中,这是紧接着进行的,允许使用“this”(对于匿名内部类特别有用),这意味着这两种表单的语义确实匹配。

如果可以的话,把字段变成最后的。


查看完整回答
反对 回复 2019-06-17
?
守着星空守着你

TA贡献1799条经验 获得超8个赞

我的规则:

  1. 不要用声明中的默认值初始化(

    nullfalse00.0…).

  2. 如果没有更改字段值的构造函数参数,则更喜欢声明中的初始化。
  3. 如果字段的值由于构造函数参数而发生变化,则将初始化放在构造函数中。
  4. 在实践中保持一致(最重要的规则)。


查看完整回答
反对 回复 2019-06-17
  • 3 回答
  • 0 关注
  • 647 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信