Entwickler-Ecke

C# - Die Sprache - Automatisch implementierte Eigenschaften (get set -Kurzform)


craash - Di 28.09.10 10:59
Titel: Automatisch implementierte Eigenschaften (get set -Kurzform)
Hallo :-)

als Anfänger in der .NET-Welt arbeite ich mich gerade durch das C#-Openbook von Galileo (http://openbook.galileocomputing.de/visual_csharp/).

Bei Abschnitt 3.7.5 geht es um automatisch implementierte Eigenschaften.


C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
public class Circle { 
  private int xKoordinate = 0
  private int yKoordinate = 0
  ...

  public int XKoordinate { 
    get { return xKoordinate; } 
    set { xKoordinate = value; } 
  }

  public int YKoordinate { 
    get { return yKoordinate; } 
    set { yKoordinate = value; } 
  } 
}


wird daraufhin abgekürzt mit


C#-Quelltext
1:
2:
3:
4:
5:
public class Circle { 
  public int XKoordinate {get; set;} 
  public int YKoordinate {get; set;} 
  ... 
}


Sieht ja gut aus und bestimmt ist die Frage auch ziemlich doof, aber woher weiß denn die abgekürzte Variante, auf welche private Variable sie eigentlich zugreifen soll?


Viele Grüße und schonmal vielen Dank :-)
craash


bakachan - Di 28.09.10 11:04

Das ist quasi das Zusammenfassen von Variablendeklaration und der Eigenschaft.
-> erstellt implizit die private Variable


Necaremus - Di 28.09.10 11:07

mal ne doofe frage dazu:

was ist besser: public int IveGotAnInt; oder public int ButMeToo {get;set;}?
ich hab bisher immer letzteres verwendet, weil ich es halt so immer gesehen habe in den code, den ich bearbeiten/erweitern sollte, aber den unterschied hab ich nie gekannt^^


craash - Di 28.09.10 11:14

Hmm also erstellt der Compiler implizit eine andere Variable mit dem private Modifizierer auf die er dann zugreift?

Folglich kann man auch nurnoch über die get/set-Methode (bzw. über den anderen Bezeichner) auf die Variable zugreifen, da sie ja nichtmehr explizit genannt ist und ich ihre Bezeichnung somit auch nicht kenne. Stimmt das so?


bakachan - Di 28.09.10 11:20

@craash:
Ja das ist so richtig.
Es macht ja keinen Unterschied ob du nun einen Variablennamen oder einen Eigenschaftsnamen verwendet

@Necaremus:
Publicvariablen würde ich nicht verwenden.
Die Variablen sind Sache der Klasse, für die Weitergabe nach außen gibt es ja Funktionen und Eigenschaften.
Vorteil dabei ist das die Klasse selbst entscheidet wie sie damit umgeht.


Th69 - Di 28.09.10 13:13

Der Hauptvorteil bei der Erstellung von automatischen Eigenschaften ist, daß man nachträglich die get bzw. set Funktionalität ergänzen kann, ohne die Klassenschnittstelle zu ändern. Ein weiterer Vorteil gibt es noch bzgl. DataBinding, da dieses nur mit Eigenschaften, nicht mit Feldern (Membervariablen) funktioniert.