C#构造函数初始化属性而不是字段?

时间:2017-04-09 16:46:51

标签: c# constructor properties field

假设您必须使用构造函数初始化某些字段...

class Foo
{
    private int price;
    public Foo(int price)
    {
        this.price = price;
    }
}

我知道通常构造函数会初始化一些字段但是如果用它初始化属性会有什么不同。例如

class Foo
{
    private int price { get; set; }
    public Foo(int price)
    {
        this.price = price;
    }
}

代码似乎工作原理相同,但我的问题是,如果这是一个好的做法,我应该这样做吗?

2 个答案:

答案 0 :(得分:4)

构造函数初始化属性很好,但很少对私有自动实现的属性很有用。我总是使用属性而不是非私有状态的字段(无论这些属性是否自动实现),私有属性在非常重要时是有意义的,例如:执行验证或其他一些计算。但是我只会将私有字段转换为私有自动实现的属性,如果我想要它只是一个只能理解属性的基于反射的库。

答案 1 :(得分:1)

绝对没问题。

为了获得更大的灵活性(例如,如果价格不是必需),您也可以使用对象初始化执行此操作:

class Foo
{
    public Foo() {}

    public int Price { get; set; }
}

var newFoo = new Foo(){ Price = someVariable };

请参阅:https://msdn.microsoft.com/en-us/library/bb397680.aspx