我有一堂课,这堂课可以是空的。该类仅具有类型为String的公共属性。当该类处于空状态时,这意味着所有属性的值都为String.Empty。
1)使用公共静态字段,可以对Class.Empty的性质进行修改。
2)我不认为公共静态属性 getter每次都应该返回一个新的空对象(将所有字段设置为空)。我认为这种做法很糟糕。
3)另一种解决方案是实现您自己的Class.IsNullOrEmpty(Class obj)。
4)一个非静态的公共布尔属性obj.__IsEmpty.
在使用此类的另一个类中,该属性永远不会为空。另一个类是从正确初始化它的(另一个类的)方法返回的。
该属性可能为空的唯一情况是,如果它在该方法之外被更新,这将导致它处于无效状态。
发布于 2009-07-31 15:31:01
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("", "");你不需要担心任何人设置任何属性,因为你没有任何设置.
https://stackoverflow.com/questions/1213189
复制相似问题