Thema: C# Frage zu "this"

Einzelnen Beitrag anzeigen

Benutzerbild von Pseudemys Nelsoni
Pseudemys Nelsoni

Registriert seit: 24. Dez 2002
Ort: Hamburg-Harburg
3.551 Beiträge
 
#1

Frage zu "this"

  Alt 25. Feb 2006, 08:21
Moin,

Das "this" dem "Self" von Delphi entspricht/ähnelt(?) weiss ich seit C++, einen Teil habe ich abe rimmernoch nicht kapiert...

Zitat:
Der this-Zeiger
Wenn Sie sich die beiden Konstruktoren aus dem letzten Beispiel noch einmal genauer ansehen, werden Sie vielleicht zwei kleine Nachteile bemerken: Zum einen heißen die Parameter lediglich a und b und nicht Real und Imaginaer (was wesentlich aussagekräftiger wäre), zum anderen ähneln sich die beiden Konstruktoren extrem und so müssen bei Änderungen wahrscheinlich beide Methoden verändert werden, was eine zusätzliche Fehlerquelle darstellt. Daher wäre es praktisch, den gemeinsamen Code nur einmal unterbringen zu müssen.

Das erste Problem, nämlich dem Konstruktor zwei Variablen namens Real und Imaginaer zu übergeben, scheitert daran, dass der Compiler dann nicht weiß, welche Variable gemeint ist - das Datenelement der Klasse oder der übergebene Parameter.

Um die Parameter trotzdem wie Datenelemente benennen zu können, gibt es den this-Zeiger. Wendet man ihn auf eine Variable an, so verwendet C# das Datenelement der Klasse, andernfalls den gleichnamigen Parameter. Der Konstruktor müsste also folgendermaßen aussehen:
public CKomplexeZahl(double Real, double Imaginaer)
{
this.Real = Real;
this.Imaginaer = Imaginaer;
}
Damit weiß der Compiler, was gemeint ist und kann die Methode problemlos übersetzen.

Auch das zweite Problem, nämlich den Code der Konstruktoren zu vereinfachen, lässt sich mit Hilfe des this-Zeigers lösen. Ruft man einen Konstruktor nämlich auf und hängt ihm - getrennt durch : - das Schlüsselwort this samt eventuellen Parametern an, so wird ein weiterer Konstruktor der Klasse aufgerufen (welcher Konstruktor aufgerufen wird, hängt dann von den Parametern ab).

Da der Aufruf des Konstruktors ohne Parameter dem Aufruf des anderen mit zwei Nullen als Parameter entspricht, kann man ihn entsprechend umschreiben und erhält die folgenden beiden Konstruktoren.
public CKomplexeZahl() : this(0, 0)
{
}

public CKomplexeZahl(double Real, double Imaginaer)
{
this.Real = Real;
this.Imaginaer = Imaginaer;
}
Dieser Code erfüllt den gleichen Zweck wie vorher, aber bei einer Änderung am Code muss nur noch einer der beiden Konstruktoren geändert werden. Das Programm ist also leichter zu überblicken und besser wartbar.
Und zwar ab "Auch das zweite Problem....", ich verstehe nicht was es mit dem ": this(0, 0)" auf sich hat. Was heisst denn dass ein weiterer Konstruktor aufgerufen wird?
Mario
MSN: cyanide@ccode.de
  Mit Zitat antworten Zitat