gpt4 book ai didi

c# - 如何使 setter 返回 C# 中类的新实例? (用于使对象不可变)

转载 作者:行者123 更新时间:2023-11-30 23:26:45 25 4
gpt4 key购买 nike

我有一个包含多个属性的类,这些属性具有 getter 和 setter。我想让这个类的对象不可变。我想给 setter 一个返回类型,而不是 void ,就像对 System.Collections.Immutable 类中的函数所做的那样。现在我是这样做的:

MyImmutableClass
{
public int MyAttribute { get; }
public MyImmutableClass SetMyAttribute(int attribute)
{
return new MyImmutableClass(attribute, ...);
}

...

public MyImmutableClass(int attribute, ...)
{
MyAttribute = attribute;
...
}
}

是应该这样做还是有更好/更好的方法?例如,我可以修改一个普通的二传手吗?

最佳答案

您应该使用静态工厂方法并使用私有(private)构造函数,属性不是为此创建的(因为创建对象可能需要大量工作 -> 使用方法)。您在 create 方法中执行所有操作,它返回一个您不能修改的对象,就像您一样拥有只读属性:

public class MyImmutableClass
{
public int MyAttribute { get; }

private MyImmutableClass(int attribute, ...)
{
MyAttribute = attribute;
...
}

public static MyImmutableClass Create(int attribute)
{
return new MyImmutableClass(attribute, ...);
}
}

然后使用它:

var myClass = MyImmutableClass.Create(2);

关于c# - 如何使 setter 返回 C# 中类的新实例? (用于使对象不可变),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36788301/

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