gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 22:35:21 26 4
gpt4 key购买 nike

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

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

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

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

4) 非静态公共(public) bool 属性obj.IsEmpty

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

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

最佳答案

基本上,1 和 2 是冲突的。

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

string.Empty 很好的原因正是因为 string 是不可变的。

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

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

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

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

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

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

关于c# - 如何正确实现我自己的静态 Empty 或 Zero 字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1213189/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com