dedlfix: Get Set Methoden

Beitrag lesen

Hi!

wer kann mir erklären für was genau get und set methoden sinnvoll sind? Das sind doch eigentlich ständige redundanzen?

Ergänzend zu Novis Antwort: Ein Problem ist auch, dass der Zugriff auf Eigenschaften syntaktisch wie ein Variablenzugriff zu notieren ist, ein Zugriff auf einen Getter/Setter jedoch ein Funktionsaufruf ist. Wenn du irgendwann einmal mehr als einen reinen Zugriff haben möchtest, musst du alle Verwendungen umschreiben. Wenn deine Bibliothek, in der die Änderung notwendig wird, sehr oft in Verwendung ist, hast du einen sehr hohen Änderungsaufwand. Auch deswegen nimmt man lieber von vorn herein die erst einmal redundant scheinenden simplen Setter und Getter.

C# hat die Gnade der späteren Geburt genutzt (oder den besseren Designer gehabt), und bietet ebenfalls einfache Eigenschaften, genannt Fields, die lediglich Werte aufnehmen können. Doch auch der C#-Designer wusste, dass Getter und Setter sehr nützliche Dinge sind. Nur hat er nicht wie bei Java eine Benennungskonvention eingeführt, sondern als syntaktischen Zucker die Propertys implementiert. Hm? Property heißt doch Eigenschaft, wo ist da der Unterschied zu den Eigenschaften namens Field? C#-Propertys verhalten sich nach außen hin wie einfache Eigenschaften. Lesen und Schreiben erfolgt durch Lesezugriffe und Zuweisungen, nicht durch Funktionsaufrufe. Aber der C#-Compiler erstellt daraus implizit Funktionen. Es folgt ein Beispiel mit einfachem Zuweisen und Auslesen:

private foo; // ein field
  public Foo { // eine property
    get { return foo; } // einfacher getter
    set { foo = value; } // einfacher setter
  }

Angewendet sieht das so aus:

var x = Foo; // lesend
  Foo = x; // schreibend

Solche einfachen Getter/Setter kann man mittlerweile auch sehr kurz notieren:

public Foo { get; set; }

Der Compiler macht den Rest (privates Field anlegen und Zugriffsmethoden erstellen), der Programmierer muss sich nicht damit rumschlagen. (Bei Java macht es die IDE und man hat jede Menge wenig interessantes Zeug im Quelltext.) Er kann aber sehr einfach bei Bedarf Getter und/oder Setter um weitere Logik ergänzen, ohne dass dabei die an anderern Stellen notierten Verwendungen geändert werden müssen oder anderswie etwas davon mitbekommen.

Willst du nicht auf C# umsteigen? :-) Hier ist alles irgendwie schöner als bei Java, finde ich.

Lo!