This in CSharp
Es gibt ein Begriff in der Programmierung, der häufig bei Anfängern etwas Schwierigkeiten macht, und zwar This. Dieser Begriff bedeutet eigentlich nur, diese/jene und wird in der Programmierung dafür verwendet zu verdeutlichen, dass es sich bei der Variable um die Variable des Kontextes bzw. der Klasse handelt und nicht die Variable des Funktion z.B.
In unserem Setter und Getter Tutorial hatten wir gelernt, dass ein Setter folgendermaßen auszusehen hat:
public class KlasseB {
private string name;
public void setName(string derName){
name=derName;
}
}
Man kann es jedoch auch folgendermaßen machen:
Beispiel für This bei Settern in CSharp
public class KlasseB {
private string name="Chuck Norris";
public void setName(string name){
this.name=name; //z.B. via KlassaA.setName("Eminem") verändert
}
}
This wird hier so verwendet, dass wir sagen this.name, also die globale Variable name, ist der name den wir als Parameter bekommen. Würden wir hier kein this verwenden, würde trotz des Aufrufes der Funktion setName, die globale string Variable name nicht verändert werden.
D.h. CSharp betrachtet die Parametervariablen zuerst. Wenn Wir also die globalen Variablen ändern möchten und die Variablennamen die wir in unserer Funktion als Parameter erzeugen, den gleichen Namen haben wie die globalen Variablen, benötigen wir this um CSharp zu verdeutlichen, dass wir die Werte die wir den Variablen in der Funktion zuordnen, verwenden möchten und nicht diejenigen, die wir global initialisiert haben.
This bei der Übergabe von Instanzen an ein Objekt
This wird auch verwendet, wenn man einem Objekt die Instanz der Klasse in der das Objekt erstellt wurde übergeben möchte. Das sieht dann so aus:
objekt.ichBins(this);
This bei Konstruktoren
This kann auch bei Konstruktoren verwendet werden. Man gibt also der globalen Variablen und dem Konstruktorargument den selben Namen. Weil nun z.B.
name = name in einem Konstruktor oder allgemein keinen wirklichen Mehrwert liefert, weil man nun nicht weiß, welcher name gemeint ist (Die globale Variable oder das Konstruktorargument), verdeutlicht man mit
this.name = name dass die Varibale name der Klasse (also die globale) gesetzt werden soll, mit dem namen der als Parameter übergeben wird.