簡體   English   中英

C#構造函數初始化屬性而不是字段?

[英]C# constructor initializing properties instead of fields?

假設您必須使用構造函數來初始化一些字段...

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;
    }
}

該代碼似乎可以正常工作,但是我的問題是這是否是一種好的做法,我應該這樣做嗎?

構造函數初始化屬性很好,但是擁有私有的自動實現屬性很少有用。 我將始終使用屬性而不是非私有狀態的字段(無論這些屬性是否自動實現),並且私有屬性在不重要的情況下才有意義,例如執行驗證或其他計算。 但是,如果我希望將其用於僅基於屬性的基於反射的庫,則只能將私有字段轉換為私有的自動實現的屬性。

絕對好

為了獲得更大的靈活性(例如,如果不需要 price),還可以通過對象初始化來實現:

class Foo
{
    public Foo() {}

    public int Price { get; set; }
}

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

請參閱: https : //msdn.microsoft.com/zh-cn/library/bb397680.aspx

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM