属性的默认值

时间:2009-02-26 14:56:31

标签: c# initialization

如果您有这样的对象:

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?

7 个答案:

答案 0 :(得分:7)

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

  1. 当你有许多构造函数时,它们都将字段初始化为相同的值。此时您有冗余代码,应该重构构造函数或使用字段初始化程序。
  2. 如果它取决于同一类层次结构中另一个字段的值,请不要使用字段初始值设定项。在部分类的绝对中,结果是可预测的,但仍然可以让人们循环...

答案 1 :(得分:2)

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

private int _id = -1

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

答案 2 :(得分:2)

现场方法简洁,获得了很多选票,但我的偏好(对于简单属性)将使用自动属性,在这种情况下,您强制使用构造函数:

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

您也可以考虑使用[DefaultValue(-1)]等,这有助于设计人员和序列化工具,但会影响自动实现的属性(或常规属性)的初始值 - 它是仅供参考。

答案 3 :(得分:0)

设置它“内联”而不是使用构造函数对我来说似乎更好地表明了意图。从功能上讲,它们是一样的。

答案 4 :(得分:0)

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

答案 5 :(得分:0)

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

答案 6 :(得分:0)

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