簡體   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