2010-08-31 80 views
1

考慮從.NET 4.0庫下面的代碼片段:顯式地初始化構造函數中私有字段的默認值.. WTF?

private T[] array; 
private static T[] emptyArray; 
private int size; 
private int version; 

static Stack() 
{ 
    Stack<T>.emptyArray = new T[0]; 
} 

public Stack() 
{ 
    array = Stack<T>.emptyArray; 
    size = 0; 
    version = 0; 
} 

是否有背後的初始化值類型的私有字段默認值(在本例中sizeversion以上)的任何理由明確地比公司的編碼標準等?

回答

1

不,沒有,至少沒有技術原因。也許在某些情況下,有人可能會這樣做,例如,如果你有某種計數器變量,並且你想清楚它從零開始。但我認爲即使這是有點可疑的。

0

我認爲初始化集合通常是一種很好的做法,主要是因爲它確保開發人員不需要初始化任何使用情況,並且假定變量已經初始化。

public class Store 
{ 
    public Store() 
    { 
     // Ready to go! 
     Products = new List<Product>(); 
    } 

    public string Id {get;set;} 
    public IList<Product> Products {get;set;} 
} 

您可以通過其來檢查集合已被初始化,如果不做的話,別人的喧鬧跳... 哈欠

1

IMO,沒有必要或受益於私人初始化變量到它們的默認值值(除非它是標準的一部分)。

編輯:幾次,它可能是有意義的(因爲它提高了代碼的可讀性) - 例如

public const OP_GET = 0; 
public const OP_ADD = 1; 
... 

private int operation = OP_GET; 
1

如果他們是原始數據類型,你不必初始化他們總是把他們的默認值

的int,long等總是有其默認值爲0,而布爾將有假等

,如果它是你可能必須初始化,使他們有一些默認值的引用類型(根據你的邏輯)並避免空引用錯誤

相關問題