代码之家  ›  专栏  ›  技术社区  ›  CS.

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

  •  5
  • CS.  · 技术社区  · 15 年前

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

    2) 我不认为这是一个公共静态 财产 getter应该返回一个新的空对象(将所有字段设置为空) )每一次。我认为这是个坏习惯。

    3) 另一种解决方案是实现您自己的解决方案 班级。 (obj级)

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

    其他类 哪里 这个班 正在使用时,该属性将永远不会为null。这个 从(另一个类的)方法返回,该方法正确地初始化了它。

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

    1 回复  |  直到 15 年前
        1
  •  9
  •   Jon Skeet    15 年前

    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("", "");
    

    您不需要担心任何人设置任何属性,因为您没有任何设置程序。。。