Sollte Konstruktor Variablen auf private Felder oder Eigenschaften direkt übergeben?

StackOverflow https://stackoverflow.com/questions/131517

  •  02-07-2019
  •  | 
  •  

Frage

Nun ist dies .NET, aber ich bin sicher, dass die Auftraggeber für all OOP-Sprache gelten sollen, vereinfachen ich .NET als Beispiel:

R # in der Regel Schöpfer Konstruktor und Leiten eingehende Variable privaten Bereich, das für mich mi neigt dazu, es zu Eigentum zu übergeben.

Jede Meinung darüber, wie die verschiedenen und was ist die beste Praxis für das?

War es hilfreich?

Lösung

Eigenschaften zu verwenden ist in Ordnung, solange sie nicht virtuell sind / überschrieben. Eigenschaften sind im wesentlichen Methoden, und Sie sollten nicht virtuelle Methoden aus dem Konstruktor aufrufen, da die entsprechenden Typ noch nicht aufgebaut werden kann. Microsoft hat ihre eigene von Richtlinien rel="nofollow , nur um den nach unten scrollen unten die entsprechende Anleitung und Code-snippet veranschaulicht, um das Problem zu sehen (sie zeigen es Methoden, aber wie ich .NET genannten Eigenschaften sind im wesentlichen spezielle Verfahren).

Andere Tipps

Übergeben der Parameter durch die Eigenschaft Setter ermöglicht es Ihnen, nur an einer Stelle aller Validierungscode zu halten.

Ich würde empfehlen, es zum Immobil senden, anstatt direkt auf den privaten Bereich, wenn Ihre tatsächliche Umsetzung die genaue Bedingungen diktieren würde. Zum Beispiel gibt es manchmal Ereignisse ausgelöst, wenn Sie die Eigenschaft verwenden, und Sie nicht möchten, dass diese Ereignisse während der Konstruktor abzufeuern. Oder vielleicht möchten Sie die Objektlogik aus einem anderen Grund zu umgehen.

Seien Sie vorsichtig, um die Property Setter verwenden. Sie können Code in dem Setter haben, die unerwarteten Nebenwirkungen verursachen kann.

ich manipulieren Felder in den Konstruktor. Felder repräsentieren den inhärenten Zustand des Objekts wirklich, und der Konstruktor Job ist es, diesen inneren Zustand zu initialisieren. Eigenschaften sind nur hier für die Verkapselung Zweck und sind ein Teil der öffentlichen Schnittstelle zum Objekt Zustand.

Die Transformationslogik an den Konstruktor Argumente oder auf die Eigenschaften Eingangswerte gelten vor den internen Zustand des Objekts einstellen könnte sehr unterschiedlich sein. Wie auch immer, wenn es der Fall ist, hat ich eine explizite Transformationsmethode von der Eigenschaft Setter genannt zu verwenden und aus dem Konstruktor, anstatt direkt Konstruktor auf dem Grundstück Setter verketten.

Wenn es keine Logik überhaupt ist, kann ich nicht sehen, warum Sie mögen, dass Eigentum Setter innerhalb Konstruktor verwenden.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top