gpt4 book ai didi

c# - 如何有效地实现不可变类型

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

在编写 C# 代码时,我经常发现自己实现了不可变类型。我总是最终会编写大量代码,我想知道是否有更快的方法来实现它。

我通常写的是:

public struct MyType
{
private Int32 _value;
public Int32 Value { get { return _value;} }

public MyType(Int32 val)
{
_value = val;
}
}

MyType alpha = new MyType(42);

当字段数量增加并且需要大量输入时,这会变得相当复杂。有没有更有效的方法来做到这一点?

最佳答案

我建议减少代码编写的唯一方法是使用 ReSharper 之类的工具为您自动生成代码。如果您从以下内容开始:

public class MyType
{
private int _value;
}

然后您可以生成“只读属性”以提供:

public class MyType
{
private int _value;
public int Value{get {return _value;}}
}

紧接着是生成构造函数:

public class MyType
{
private int _value;
public int Value{get {return _value;}}

public MyType(int value)
{
_value = value;
}
}

生成步骤共8次按键。


如果你真的想要一个不可修改的不可变类,我会这样声明它:

public sealed class MyType
{
public int Value{get {return _value;}}
private readonly int _value;

public MyType(int value)
{
_value = value;
}
}

这使得类不可派生(意味着子类不能修改其内部状态),并且 _value 属性只能在构造期间分配。遗憾的是,ReSharper 没有针对此模式的代码生成,因此您仍然需要手动构建(大部分)它。

关于c# - 如何有效地实现不可变类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7236977/

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