如何正确实现我自己的静态Empty或Zero字段

时间:2009-07-31 15:28:45

标签: c# class-design

我有一个班级,这个班级可以是空的。此类只具有String类型的公共属性。当此类处于空状态时,这意味着所有属性都具有String.Empty的值。

1)使用公共静态字段,可以修改Class.Empty的属性。

2)我没有看到公共静态属性 getter每次都应该返回一个新的空对象(将所有字段设置为空手动)。我认为这是不好的做法。

3)另一种解决方案是实现自己的类。 IsNullOrEmpty (类obj)

4)非静态公共布尔属性 obj。 IsEmpty

在使用此类其他类中,该属性永远不会为null。 其他类是从一个方法(另一个类)中返回的,它正确地初始化它。

属性可能为null的唯一情况是,如果它在该方法之外新建,则会导致它无论如何都处于无效状态。

1 个答案:

答案 0 :(得分:9)

1和2冲突,基本上。

你的类型是不可变的,在这种情况下你可以每次都返回对同一个实例的引用......或者它是可变的,在这种情况下你来返回对一个新对象的引用每一次。

string.Empty之所以正常是因为string是不可变的。

您的类型是否可变?

编辑:根据您的评论,听起来属性根本不应该有设置者。相反,值应该传递给构造函数,并存储在只读字段中。

此时你的类型是不可变的,所以你可以公开一个总是返回相同值的公共字段或属性,即

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

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

您无需担心任何人设置任何属性,因为您还没有任何设置器......

相关问题