繁体   English   中英

属性的默认值

[英]Default value of a property

如果您有这样的对象:

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?

这不仅仅是一个风格问题。 只有少数几个案例是功能性问题

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

取决于你想要什么时候设置...

private int _id = -1

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

字段方法简洁,获得了大量的投票,但我的偏好(对于简单属性)将使用自动属性,在这种情况下,您被迫使用构造函数:

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

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

对我而言,将其设置为“内联”而不是使用构造函数似乎更能表明意图。 功能上他们是一样的。

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM