2009-07-31 34 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

相关问题