Getter und Setter?

3 Antworten

Getter und Setter dienen dazu um Dinge zu kapseln.

Z.B. dienen sie dazu, dass man die interne Logik abändern kann ohne die Interaktion mit einer Klasse von außen zu ändern.

Außerdem kann man Dinge tun wie Werte prüfen, und einschränken wie anderer Code auf die Werte zugreifen kann. Man könnte z.B. einen öffentlichen getter haben aber keinen setter.

In C# gibt es "Properties" die für solche Aufgaben sind. Die erlauben quasi auch eine Kurzfassung wenn man zuerst keinen setter/getter braucht, erlauben aber diese später hinzuzufügen ohne die Zugriffe von außen zu ändern.

Dieses abkapseln ist natürlich üblich in oop Sprachen. In anderen Sprachen in denen man nicht so viel objektorientiert programmiert sind sie unüblicher.

Woher ich das weiß:Berufserfahrung – Software Entwickler / Devops

Getter und Setter werden in C# mit Hilfe von Properties umgesetzt. Sie dienen dazu, Felder zu verwalten.

Angenommen, du hättest ein Projekt erstellt und in diesem diese Klasse:

class Rectangle
{
  public int height;
}

Bei dieser Implementation könnte man das Feld von außen leicht ändern:

Rectangle rectangle = new Rectangle();
rectangle.height = someHeight;

Nun hast du das im Verlauf des Projekts vielleicht öfter gemacht, merkst aber plötzlich, dass es praktisch wäre, vorher invalide Angaben (z.B. negative Werte) zu filtern.

Du könntest nun damit anfangen, an jeder Stelle, wo du height einen Wert zugewiesen hast, eine Abfrage einzubauen:

if (someHeight > 0)
{
  rectangle.height = someHeight;
}

Das sorgt aber auch dafür, dass dein Code stetig anwächst und wenn du eine Stelle vergisst, hast du schon einen Fehler im Code.

Mit einem Property sorgst du für eine Entkopplung, die dieses Problem verhindert. Du hast eine zentrale Stelle, wo der Filter eingebaut wird.

class Rectangle
{
  private int _height;

  public int Height
  {
    get => _height;
    set
    {
      if (value > 0)
      {
        _height = height;
      }
    }
  }
}

Wenn du nun von außen mit dem Wert des Feldes agieren möchtest, machst du das über das Property:

Rectangle rectangle = new Rectangle();
rectangle.Height = someHeight;

Bei einem Getter verhält es sich ähnlich, nur mit dem Unterschied, dass er eben den Feldwert zurückgeben, statt Setzen soll.

Nach Bedarf könntest du auch dafür sorgen, dass Felder gar nicht von außen gesetzt / gelesen werden können, indem du keinen Getter/Setter für dieses anbietest (und das Feld selbst als nicht sichtbar deklarierst).

im oop sollte nie von aussen auf einen internen wert direkt zugegriffen werden können . dazu sollte es einen setter geben , der schreiben darf und in diesem setter sind halt alle dinge zu erledigen und prüfen das nur "richtige" werte geschrieben werden können , genau das gleiche beim getter von variablen .

ein objekt verwaltet sich komplett selber , ergo hat ein direkt zugriff niemals statt zu finden .