假设该场景不允许实现不可变类型。在这个假设之后,我想就如何正确地设计一种在消费之后变得不可变的类型的意见/例子。设计一个可变类,消耗后变为不可变
public class ObjectAConfig {
private int _valueB;
private string _valueA;
internal bool Consumed { get; set; }
public int ValueB {
get { return _valueB; }
set
{
if (Consumed) throw new InvalidOperationException();
_valueB = value;
}
}
public string ValueA {
get { return _valueA; }
set
{
if (Consumed) throw new InvalidOperationException();
_valueA = value;
}
}
}
当ObjectA
消耗ObjectAConfig
:
public ObjectA {
public ObjectA(ObjectAConfig config) {
_config = config;
_config.Consumed = true;
}
}
我不满意,这只是工作,我想知道是否有一个更好的模式(排除在外,因为说着,做ObjectAConfig
不变的从开始设计)。
例如:
可以使感限定像
Once<T>
一个单子在允许包裹值仅被初始化一次?可以合理的定义一个返回类型本身改变私人领域的类型?即你可以冻结它 -
*为什么*你不能实现一个不可变的类型?如果你解释了你正在尝试解决的真正问题,它会有所帮助。 – 2013-02-26 12:12:02
[这个问题](http://stackoverflow.com/questions/4168382)有一些有趣的模式做类似的事情。 – 2013-02-26 12:18:29