2

如果你有这样的对象:

public class Foo
{
    private int _id;

    public int id
    {
        get { return _id; }
        set { _id = value; }
    }

    private string _name;

    public string name
    {
        get { return _name; }
        set { _name = value; }
    }
}

并且您想将 id 初始化为 -1 并将名称初始化为 String.Empty 最佳实践是什么?(以及为什么)

正在做:

private int _id = -1

或者

在构造函数中设置 _id = -1 和 name = String.Empty?

4

7 回答 7

7

这更像是一个风格问题。只有少数情况是功能问题

  1. 当您有许多将字段初始化为相同值的构造函数时。那时你有多余的代码,应该重构你的构造函数或使用字段初始化器。
  2. 如果字段初始值设定项依赖于同一类层次结构中另一个字段的值,则不要使用它。在没有部分类的情况下,结果是可以预测的,但仍然可以让人陷入困境。
于 2009-02-26T14:59:45.740 回答
2

取决于您希望何时设置它...

private int _id = -1

将在调用构造函数之前初始化 _id。

于 2009-02-26T14:59:31.157 回答
2

字段方法很简洁,获得了很多选票,但我的偏好(对于简单属性)是使用自动属性,在这种情况下你不得不使用构造函数:

    public Foo() {
        Id = -1;
        Name = "";
    }
    public int Id {get;set;}
    public string Name {get;set;}

您也可以考虑使用[DefaultValue(-1)]etc,这有助于设计人员和序列化程序,但这不会影响自动实现的属性(或常规属性)的初始值 - 它只是附加信息。

于 2009-02-26T15:00:16.210 回答
0

在我看来,将其设置为“内联”而不是使用构造函数似乎可以更好地表明意图。在功能上它们是相同的。

于 2009-02-26T14:59:14.853 回答
0

CLR 向导可能会纠正我,但我相信这两种方法在功能上是相同的,但您可以提出一个论点,即在构造函数中设置默认值更加明确和明显,但也有点混乱。

于 2009-02-26T15:00:00.950 回答
0

内联初始化由 C# 编译器添加到构造函数的顶部,因此实际上没有区别。我个人更喜欢总是添加构造函数,即使它只是一个默认构造函数。

于 2009-02-26T15:00:42.057 回答
0

主要是风格偏好的问题。我通常在构造函数中分配它们,因为它是在实例化对象时发生的所有数据和过程的合理位置。

于 2009-02-26T15:05:17.833 回答