我有一个班,这个班可以是空的.此类只具有String类型的公共属性.当此类处于空状态时,这意味着所有属性都具有String.Empty的值.
1)使用公共静态字段,可以修改Class.Empty的属性.
2)我没有看到公共静态属性 getter 每次都应该返回一个新的空对象(手动将所有字段设置为Empty ).我认为这是不好的做法.
3)另一种解决方案是实现自己的类.IsNullOrEmpty(Class obj).
4)非静态公共布尔属性obj.IsEmpty.
在使用此类的另一个类中,该属性永远不会为null.的其它类是从方法(的又一类,),其可以正确初始化它返回.
属性可能为null的唯一情况是,如果它在该方法之外被新建,则会导致它无论如何都处于无效状态.
1和2冲突,基本上.
您的类型是不可变的,在这种情况下,您可以每次返回对同一实例的引用...或者它是可变的,在这种情况下,您必须每次都返回对新对象的引用.
原因string.Empty很好正是因为string是不可改变的.
你的类型是否必须是可变的?
编辑:根据您的评论,听起来属性不应该有设置器.相反,值应该传递给构造函数,并存储在只读字段中.
此时,您的类型是不可变的,因此您可以公开公共字段或始终返回相同值的属性,即
private static readonly MyType empty = new MyType("", ""); // Or whatever
public static MyType Empty { get { return empty; } }
Run Code Online (Sandbox Code Playgroud)
要么
public static readonly MyType Empty = new MyType("", "");
Run Code Online (Sandbox Code Playgroud)
你不需要担心任何人设置任何属性,因为你没有任何setter ...