Also habe ich gehört, dass ein Wert in einer Eigenschaft wie folgt validiert:
%Vor%ist falsch und ich sollte es vermeiden.
Aber früher wurde mir gesagt, dass dies der gute Weg ist. Wir könnten die Kapselung verwenden, es gibt nur einen Platz zum Überprüfen, TROCKEN, usw.
Was ist los mit meinem kleinen Beispiel?
Es gibt nichts Falsches daran, Ausnahmen in einem Property Setter zu werfen. Aber du solltest ein ArgumentException
werfen und auch den Wert der Eigenschaft setzen!
Aus einem Artikel zu Best Practices in MSDN :
Eigenschaftengetter sollten einfache Operationen ohne Vorbedingungen sein. Wenn ein Getter eine Ausnahme auslöst, sollten Sie die Eigenschaft als Methode neu entwerfen. Diese Empfehlung gilt nicht für Indexer. Indexer können Ausnahmen wegen ungültiger Argumente auslösen.
Es ist gültig und akzeptabel, Ausnahmen von einem Eigenschaften-Setter zu werfen.
Es gibt einige ähnliche Fragen auch zu SO.
Sie sollten so leicht wie möglich sein. Und wenn Setter einen Fehler ausgibt, ist das in Ordnung, aber vielleicht solltest du darüber nachdenken, ihn zu einer Funktion zu verschieben. Dinge können leicht unordentlich werden.
Vermeiden Sie das Auslösen von Ausnahmen von Eigenschaftengettern. Immobiliengetter sollte einfache Operationen sein und sollte keine Vorbedingungen haben. Wenn ein Getter kann eine Ausnahme werfen, sollte es wohl neu gestaltet werden eine Methode.
Bewährte Methoden: Ausnahmen von den Eigenschaften werfen
Welche Ausnahme soll von einem Property Setter geworfen werden?
Siehe: Best Practices: Ausnahmen von den Eigenschaften werfen , um eine Erklärung zu erhalten und Diskussion, warum das Auslösen von Ausnahmen aus Eigenschaften schlecht ist.
Zugegebenermaßen spricht dieser Beitrag über Immobiliengetter.
Setter werden von den Konsumenten im Allgemeinen so gesehen, dass sie ein privates Feld einfach durch die Eigenschaft verdecken und eventuell zusätzliche Dinge tun, Ausnahmen sind ein unerwartetes Verhalten und können Sie sich vorstellen, jede Anweisung in einen try-Block einzufügen?
>Auch wenn das Verhalten von Richtlinien akzeptiert wird, ist es ein Albtraum, nach Entwicklern zu raten. Die Validierungslogik sollte in einer separaten Methode enthalten sein und dann bei Bedarf von der Eigenschaft aufgerufen werden.
Wenn Sie die Validierung oder das spezielle Verhalten beim Festlegen von Eigenschaften benötigen, sollten Sie eine festgelegte Methode verwenden, z. SetMyProp(string value)
, da es einen Unterschied macht, dass es zu einer Ausnahme usw. führen kann.
Wenn Sie die Eigenschaften für ein WPF-Modell verwenden, sollten Sie stattdessen die integrierte WPF-Validierung für Daten verwenden.
Tags und Links c# dry encapsulation