假设场景不允许实现不可变类型。根据这个假设,我想了解如何正确设计一种在使用后变得不可变的类型的意见/示例。
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>
允许包装值只初始化一次的monad吗?定义一个返回类型本身更改私有字段的类型是否有意义?