Hier sind einige Argumente für Eigenschaften und meine Gegenargumente:
Einfacher zu verwenden als Getter- und Setter-Methoden zu schreiben
Getter- und Setter-Methodenpaare sind ein Codegeruch. Wenn Sie es einfacher machen, diese zu schreiben, ist es einfacher, einen Mathe-Test nicht zu bestehen, indem Sie ein Scantron-Formular verwenden und alle Cs ausfüllen. Objekte, die aus Gründen der Persistenz nur den Status enthalten, sollten keine Getter / Setter verwenden und zum Zeitpunkt der Persistenz unveränderliche Objekte erstellen.
Was für einen Verbraucher eines Objekts wichtig ist, ist, was es tut, nicht wie es es tut. Sein Verhalten ist das, was es tut; sein Zustand ist, wie es es tut. Wenn Sie sich um den Zustand eines Objekts kümmern (mit Ausnahme der Persistenz, obwohl dies auch OO bricht), machen Sie einfach kein OOP und verlieren seine Vorteile.
Sie geben den Verbrauchern einen groben Hinweis auf die Leistung
Dies kann sich in Zukunft für jede Immobilie ändern. Angenommen, in Version 1.0 gibt der Zugriff auf PropertyX einfach ein Feld zurück. Wenn das Feld in Version 1.5 null ist, verwendet PropertyX das Nullobjektmuster, um ein neues Nullobjekt zu erstellen. In Release 2.0 wird das Feld durch die Getter-Methode in PropertyX weiter validiert.
Da die Eigenschaft immer komplexer wird, scheint die Leistungsangabe für die Verwendung einer Eigenschaft immer weniger wahr zu sein.
Sie sind besser als öffentliche Felder
Das ist wahr. Aber auch Methoden.
Sie stellen einen grundlegend anderen Aspekt eines Objekts dar als eine Methode, und alle Verbraucher des Objekts sollten sich darum kümmern
Sind Sie sicher, dass beide obigen Aussagen wahr sind?
Sie sind einfacher zu tippen, Mann
Sicher, das Tippen myObject.Length
ist einfacher als das Tippen myObject.Length()
, aber konnte das nicht mit ein wenig syntaktischem Zucker behoben werden?
Warum Methoden anstelle von Eigenschaften verwenden?
Keine Leistungsgarantien. Die API bleibt auch dann wahr, wenn die Methode komplexer wird. Der Verbraucher muss seinen Code profilieren, wenn Leistungsprobleme auftreten, und darf sich nicht auf Word-of-API verlassen.
Weniger für den Verbraucher zu denken. Hat diese Eigenschaft einen Setter? Eine Methode sicher nicht.
Der Verbraucher denkt aus einer richtigen OOP-Denkweise. Als Konsument einer API bin ich daran interessiert, mit dem Verhalten eines Objekts zu interagieren. Wenn ich Eigenschaften in der API sehe, sieht es dem Status sehr ähnlich. Wenn die Eigenschaften zu viel bewirken, sollten sie nicht einmal Eigenschaften sein, also sind Eigenschaften in einem API-ARE-Status so, wie sie den Verbrauchern erscheinen.
Der Programmierer der API wird sich eingehender mit Methoden mit Rückgabewerten befassen und nach Möglichkeit vermeiden, den Status des Objekts in solchen Methoden zu ändern. Die Trennung von Befehlen von Abfragen sollte nach Möglichkeit erzwungen werden.
Ich frage Sie also, warum Sie Eigenschaften anstelle von Methoden verwenden sollten. Die meisten Punkte in MSDN sind Code-Gerüche an und für sich und gehören weder zu Eigenschaften noch zu Methoden.
(Diese Gedanken kamen mir, nachdem ich über CQS nachgedacht hatte.)
type GetFoo() void SetFoo()
zehntausend Mal geschrieben haben. Während meiner gesamten Zeit beim Schreiben von C # -Code war ich noch nie durch eine Eigenschaft verwirrt.