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

2022-08-31 04:30:30

我最近一直在用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

我的规则:

  1. 不要使用声明中的默认值 (, , , ... ) 进行初始化。nullfalse00.0
  2. 如果您没有更改字段值的构造函数参数,则首选声明中的初始化。
  3. 如果字段的值由于构造函数参数而更改,请将初始化放入构造函数中。
  4. 在实践中保持一致(最重要的规则)。

答案 2

在 C# 中,这无关紧要。您给出的两个代码示例是完全等效的。在第一个示例中,C# 编译器(或者它是 CLR?)将构造一个空构造函数并初始化变量,就好像它们在构造函数中一样(Jon Skeet 在下面的注释中对此进行了解释)。如果已经存在构造函数,则“上面”的任何初始化都将移动到其顶部。

就最佳实践而言,前者比后者更不容易出错,因为有人可以很容易地添加另一个构造函数并忘记链接它。


推荐