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?

Antworten auf die Frage(1)

Ihre Antwort auf die Frage