Unterschied zwischen: get/set Methode und Attribut als public definieren(C#)

maria1

Mitglied
Hallo,

warum gibt es diese get bzw. set Methoden in C#...was haben sie für einen Vorteil**** Damit setzte ich doch einen Attributenwert fest oder rufe ihn ab...das könnte ich ja genauso gut machen, wenn ich das Attribut auf public setze! Bitte klärt mich da mal auf....;)
 
Wenn es nur eine public-Variable wäre, würdest du weder das Setzen noch das Lesen mitbekommen. So kannst du darauf reagieren und den Zustand innerhalb deiner Klasse entsprechend anpassen. Du behältst also die Kontrolle.

Edit: In anderen Sprachen, z.B. Java, benutzt man natürlich auch Getter und Setter, aber da hat man es nicht so komfortabel wie in C#, sondern muss tatsächlich Methoden schreiben (getFoo() und setFoo()) und diese auch aufrufen. In C# kann man die Variablen ja einfach lesen und beschreiben, was meiner Meinung nach sehr gut designt ist.
 
Zuletzt bearbeitet:
was meinst du mit mitbekommen?

bsp:

public class TestKlasse
{
private int x;

public int Variable
{
get{return x;}
set{this.x=value}
}

}


TestKlasse testobject;
testobject.Variable=5;


oder wenn x public wäre: testobject.x=5;

ob ich x über "Variable" setze oder direkt....wer kriegt denn wo was mit?
 
hat das vielleicht irgendwas mit Lese- und Schreibzugriffberechtigung zutun? weil wenn ich x als private deklariere und nur die get Methode implementiere, dann könnte ich theoretisch die x-Variable nur lesen....
 
Zuletzt bearbeitet:
hat das vielleicht irgendwas mit Lese- und Schreibzugriffberechtigung zutun? weil wenn ich x als private deklariere und nur die get Methode implementiere, dann könnte ich theoretisch die x-Variable nur lesen....

Das auch, aber jetzt nochmal zu deinem anderen Post.

Du scheinst nicht ganz verstanden haben, was es mit dem get und set auf sich hat (Deshalb ja auch der Thread :-D). Man kann innerhalb der beiden Blöcke ganz normalen Code haben! Versuch das mal mit einer public Variable.

C#:
public int Variable  {
	get {
		Console.WriteLine("OMG! Jemand hat x gelesen****** Vielleicht sollte ich mitzählen, wie oft schon!");
		return x;
	}
	set {
		Console.WriteLine("OMG! Jemand hat x gesetzt******");
		x = value;
	}
}

Edit: Dass man damit Variablen schreibgeschützt machen kann ist natürlich einer der wichtigsten Punkte. Das wollte ich nochmal klarstellen.
 
Zuletzt bearbeitet:
Hallo maria1,

mit get/set entkoppeltst du den Zugriff von den eigentlichen Datenstrukturen. Nach außen wird eine feste Schnittstelle vereinbart, aber intern bist du frei in der Implementierung der zugrunde liegenden Datenstrukturen und kannst diese bei Bedarf auch ändern, ohne dass die Schnittstelle davon betroffen ist. Außerdem kannst du eine komplexere Funktionalität, als nur das simple Lesen oder Schreiben eines Wertes - z.B. Validierungen - implementieren (wahrscheinlich das, was auch CPoly meint).

Da ein get/set nach außen wie ein einfacher Variablenzugriff verwendet wird und daher eine unmittelbare Reaktion impliziert, sollt man darauf achten, keine Funktionalitäten die Rechenzeit kosten, in die Getter/Setter einzubauen. Dafür nimmt man dann besser wieder eine Methode.

Gruß
MCoder
 

Neue Beiträge

Zurück