2011-11-20 91 views
0

C#中對於具有默認非零值的類成員的最佳做法是什麼?C#中的類成員

你可以寫這樣說:

private int someField = 9; 
public int SomeField 
{ 
    get (return someField; } 
    set { someField = value; } 
} 

或者這樣說:

public Int32 SomeField = 9; 

不過的Int32是相同的詮釋。

那麼,哪種方式更好,可能會導致更少的問題?

+1

你的問題是不相關的,成員有非零默認值的事實,你真正的問題是公共財產與公共成員 – CharlesB

+0

可能重複的私有成員[C#:公共領域與自動屬性] (http://stackoverflow.com/questions/1180860/c-public-fields-versus-automatic-properties) – CharlesB

回答

6

只要使用C#別名,他們閱讀起來更短,出於這個原因。

您不應該將字段暴露爲public - 您正在以這種方式破壞封裝。

總之,使用方法:

private int someField = 9; 
public int SomeField 
{ 
    get (return someField; } 
    set { someField = value; } 
} 
+0

只想指出,這也打破封裝,這只是一個不同的方式做它。這對公共領域的唯一好處是更容易(有爭議 - 特別是因爲C#屬性在使用時像字段一樣對待)在未來重構。 – Rob

0

還要注意的是,如果你有多個構造函數,沒有明確初始化在其聲明中的字段。因爲編譯器會生成代碼來爲每個構造函數初始化這些字段。對於這種情況,請使用一個基礎構造函數來初始化您的字段,並讓其他構造函數調用此基礎構造函數。

int field1; 
int field2; 
int field3; 

public MyClass() 
{ 
    field1 = 12; 
    field2 = 1; 
    field3 = 5; 
} 
public MyClass(int SomeValue) : this() 
{ 
    field1 = SomeValue; 
} 

public MyClass(int SomeValue, int SomeOtherValue) : this() 
{ 

    field1 = SomeValue; 
    field2 = SomeOtherValue; 
} 
1

。也可以採用@Oded提出的答案:

public int field1 { get; set; } //auto-implemented property, :) 

public MyClass() { 
    field1 = 9; //or other default value 
} 
0

正如我會避免硬編碼這樣值的最佳實踐。以後再維護它們可能非常棘手。你最好打賭是在一個集中的地方創建一個枚舉列表並將它們轉換爲整數。這樣可以更好地控制/維護。

public enum SomeFieldValue 
     { 
      ValueOne = 1, 
      ValueTwo = 2, 
      ValueThree = 3 
     } 

     public int MyDefaultSomeValue = (int) SomeFieldValue.ValueOne;