Entwerfen Sie eine veränderbare Klasse, die nach dem Verzehr unveränderlich wird
Angenommen, das Szenario lässt nicht zu, dass ein unveränderlicher Typ implementiert wird. Ausgehend von dieser Annahme möchte ich Meinungen / Beispiele dazu haben, wie man einen Typ richtig entwirft, der nach dem Verzehr unveränderlich wird.
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;
}
}
}
WannObjectA
verbrauchtObjectAConfig
:
public ObjectA {
public ObjectA(ObjectAConfig config) {
_config = config;
_config.Consumed = true;
}
}
Ich bin nicht zufrieden, dass das einfach funktioniert, ich würde gerne wissen, ob es ein besseres Muster gibt (ausgeschlossen, wie gesagt, machenObjectAConfig
unveränderlich von Anfang an).
Zum Beispiel:
kann sinnvoll sein, eine Monade wie zu definierenOnce<T>
kann der umbrochene Wert nur einmal initialisiert werden?
kann es sinnvoll sein, einen Typ zu definieren, der den Typ selbst zurückgibt und ein privates Feld ändert?