Hallo,
ich habe gestern Erfahren, dass man seine Felder (Variabeln in Klassen, bzw Eigenschaften). Am besten private deklariert. Also natürlich nicht alle sonder, z.B. Variabeln die wenn sie geändert werden, auch eine andere Variabel synchron mitlaufen muss.
Z.B. hat man ein Programm was den Preis des Brotes berechnet und wenn sie die Anzahl der Brote ändert muss sich damit auch mit der Preis ändern =D
Nun hat C# ja die tollen Eigenschafte, auch Akzessoren genannt, get & set.
Code
private int anzahlBrote;
private int brotePreis;
public const int brotKosten;
public int AnzahlBrote
{
get {
return anzahlBrote;
}
set {
anzahlBrote = AnzahlBrote;
brotPreis = anzahlBrote * broteKosten;
}
}
Wie ich nun das Verstanden habe ist das so, dass die Eigenschaften eine spezielle Methode sind, sprich wenn im Programm eine Instanz meiner Klasse Namens broteRechnung existiert :
brotRechnung.AnzahlBrote = 10;
wird der set-er aufgerufen und führt die 2 Anweisungen durch. Richtig ?
Also die Akzessoren sind nur Methoden, die eine oder mehrere Anweisungen durchführen.
Nun habe ich aber einen Programmcode gesehen, da stand nur eine Eigenschaft, aber keine Deklaration eines pirvaten Feldes.
public int AnzahlBrote {get; private set;}
naja, dass private set; sagt dass diese Eigenschaft nur in der Klasse selbst gesetzt werden darf. Aber es ist doch nur die spezielle Methode. Ich meine es wird nirgends in der Klasse gesagt
private int anzahlBrote;
Dann müsste da doch keine Variabel sein ? Aber es werden Werte gespeichert in diese Methode und sie wird wie eine Variabel im Programm gehandelt :confused:
Kann da jemand Licht ins Dunkel bringen ?
Ausserdem habe ich gelesen, dass wenn man Felder oder Methoden als private deklariert, sie nun innerhalb des Objektes eingesetzt werden können, das ist verständlich. Instanzen anderer Klassen, können nichts sehen, aber Instanzen, der selben Klasse können die Felder und Methoden sehen :confused:
Heißt das wenn ich eine Klasse "goodMorningVietnam" habe und 2 Instanzen, das die eine sagen kann instanz2.instanz1.privatesFeld ?
Mfg