2009-07-31 37 views
5

我有一個類,這個類可以是空的。這個類只有String類型的公共屬性。當這個類處於空狀態時,這意味着所有屬性的值都是String.Empty。如何實現我自己的靜態空或零字段

1)使用公共靜態字段,可以修改Class.Empty的屬性。

2)我沒有看到一個公共靜態財產的getter應該返回一個空對象(將所有的字段清空手動)每次。我認爲這是不好的做法。

3)另一種解決方案是實現您自己的類。 IsNullOrEmpty(Class obj)

4)A 非靜態公共布爾屬性obj。 IsEmpty

其他類其中該類正在使用,財產永遠不會爲空。 其他類從正確初始化它的方法(還有另一個類)返回。

該屬性可能爲空的唯一情況是它是否在該方法之外被新增,從而導致它無論如何處於無效狀態。

回答

9

1和2衝突,基本上。

無論你的類型是不可改變的,在這種情況下,你可以每次都返回相同的實例的引用......或者是可變的,在這種情況下,你每次參考返回一個新的對象。

原因string.Empty罰款正是因爲string是不可變的。

您的類型是否可變?

編輯:根據你的評論,這聽起來像屬性不應該有setter。相反,這些值應該傳遞給構造函數,並存儲在只讀字段中。

在這一點上你的類型是不變的,所以你可以公開或者公共字段或屬性總是返回相同的值,即

private static readonly MyType empty = new MyType("", ""); // Or whatever 
public static MyType Empty { get { return empty; } } 

public static readonly MyType Empty = new MyType("", ""); 

你不需要擔心任何人設置任何屬性,因爲你沒有任何setter ...

+0

我曾經的屬性設置,他們不應該改變。所以答案是否定的,對吧? – 2009-07-31 15:54:27

相關問題