假設該場景不允許實現不可變類型。在這個假設之後,我想就如何正確地設計一種在消費之後變得不可變的類型的意見/例子。設計一個可變類,消耗後變爲不可變
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