首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何正确地实现自己的静态空字段或零字段

如何正确地实现自己的静态空字段或零字段
EN

Stack Overflow用户
提问于 2009-07-31 15:28:44
回答 1查看 3.2K关注 0票数 5

我有一堂课,这堂课可以是空的。该类仅具有类型为String的公共属性。当该类处于空状态时,这意味着所有属性的值都为String.Empty。

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

2)我不认为公共静态属性 getter每次都应该返回一个新的空对象(将所有字段设置为空)。我认为这种做法很糟糕。

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

4)一个非静态的公共布尔属性obj.__IsEmpty.

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

该属性可能为空的唯一情况是,如果它在该方法之外被更新,这将导致它处于无效状态。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2009-07-31 15:31:01

1和2基本上是冲突。

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

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

你的类型必须是可变的吗?

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

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

代码语言:javascript
运行
复制
private static readonly MyType empty = new MyType("", ""); // Or whatever
public static MyType Empty { get { return empty; } }

代码语言:javascript
运行
复制
public static readonly MyType Empty = new MyType("", "");

你不需要担心任何人设置任何属性,因为你没有任何设置.

票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1213189

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档