在编写C#时,我经常发现自己实现了不可变类型.我总是写了很多代码,我想知道是否有更快的方法来实现它.
我通常写的:
public struct MyType
{
private Int32 _value;
public Int32 Value { get { return _value;} }
public MyType(Int32 val)
{
_value = val;
}
}
MyType alpha = new MyType(42);
Run Code Online (Sandbox Code Playgroud)
当字段数量增加并且输入很多时,这变得相当复杂.有没有更有效的方法来做到这一点?
我建议编写更少代码的唯一方法是使用像ReSharper这样的东西为你自动生成代码.如果您从以下内容开始:
public class MyType
{
private int _value;
}
Run Code Online (Sandbox Code Playgroud)
然后,您可以生成"只读属性",以便:
public class MyType
{
private int _value;
public int Value{get {return _value;}}
}
Run Code Online (Sandbox Code Playgroud)
然后生成构造函数给出:
public class MyType
{
private int _value;
public int Value{get {return _value;}}
public MyType(int value)
{
_value = value;
}
}
Run Code Online (Sandbox Code Playgroud)
生成步骤总共是8个按键.
如果你真的想要一个不可修改的不可变类,我会声明它:
public sealed class MyType
{
public int Value{get {return _value;}}
private readonly int _value;
public MyType(int value)
{
_value = value;
}
}
Run Code Online (Sandbox Code Playgroud)
这使得类不可导出(意味着子类不能修改其内部状态),并且该_value属性仅在构造期间可分配.不幸的是,ReSharper没有为此模式生成代码,因此您仍然需要手动构建(大部分)它.