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