set/get Verständnisfrage
-
Hallo Community,
ich bin aktuell dabei mich in C# einzuarbeiten und zwar mit dem Buch “Visual C# 2012 - Das umfassende Handbuch“. Aktuell bin ich bei set und get. Grundsätzlich würde ich in C++ ja auch set und get Funktionen schreiben um private Membervariablen einer Klasse bearbeiten und auslesen zu können. Soweit so gut. Worin liegt aber nun der Vorteil anstelle von Funktionen eben set und get zu benutzen? Schließlich könnte ich mir doch auch in C# solche Funktionen schreiben. Der zweite Punkt der mich verwundert ist dass in dem Buch dann nicht nur von außerhalb der Klasse mit dem set/get Konstrukt gearbeitet wird um damit die private Variable zu manipulieren oder auszulesen sondern das dass auch innerhalb der Klasse gemacht wird. Man arbeitet also sowohl in als auch außerhalb der Klasse immer nur über den indirekten Weg mit der private Variable. Gibt es einen Grund/Vorteil dafür dass hier innerhalb der Klasse nicht direkt die private Variable angesprochen wird? Danke schonmal an alle die antworten.
-
Das ist im Endeffekt Geschmackssache. In Java gibt es keine Properties, da schreibt man Getter und Setter. Mit Properties ist die Syntax evtl. etwas schöner. Du kannst sowas schreiben:
obj.Height += 10;
statt
obj.setHeight(obj.getHeight() + 10);
Und man kann schon durch die Semantik besser sehen, was nur eine Eigenschaft ist und was eine Funktion.
Und es ist einfacher, sowas wie Data Binding zu definieren/implementieren. In Java braucht man dann Konventionen, in .NET kann man einfach Properties binden.
-
pHelloWorld schrieb:
Man arbeitet also sowohl in als auch außerhalb der Klasse immer nur über den indirekten Weg mit der private Variable. Gibt es einen Grund/Vorteil dafür dass hier innerhalb der Klasse nicht direkt die private Variable angesprochen wird?
Man könnte ja auf die Idee kommen in den setter noch diverse Prüfungen reinzubauen. z.B. "Werfe eine Exception, wenn Height<0". Wenn man über den Setter geht statt direkt die Variable zu setzen, hätte man dann die Prüfung schon an allen Codestellen mit drin.
-
Besten Dank für die schnellen Antworten. Die Möglichkeit der Prüfung hatte ich beim Lesen gar nicht auf dem Schirm. Das hält dann natürlich den Schreibaufwand und die Fehleranfälligkeit bei Korrekturen kleiner. Danke für den kleinen Denkanstoß!
-
Die private Variable kann man durchaus direkt ansprechen, ich kenne keinen Kollegen der das nicht machen würde, es sei denn er will auch intern in der Klasse die Prüfungen innerhalb der Property verwenden. Insofern ist das Buch was Du gerade durcharbeitest etwas Missverständlich. Feel free
-
Die private Variable kann man durchaus direkt ansprechen
?
wie kommst du von außen an ne private variable einer klasse, außer mit reflections?
-
GoaZwerg schrieb:
intern in der Klasse
-
Ich sehe den Vorzug von get / set mehr im Schnittstellen-Design und damit waren die Schritte für Technologie zur Dependency Injection - WPF, Lambda Kalkül, LINQ etc - unter .NET 3.5+ immanent.