在编写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/

10-13 06:26