AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Frage zu "this"

Ein Thema von Pseudemys Nelsoni · begonnen am 25. Feb 2006 · letzter Beitrag vom 25. Feb 2006
Antwort Antwort
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
Benutzerbild von FAlter
FAlter

Registriert seit: 21. Jul 2004
Ort: Ostfildern
1.096 Beiträge
 
FreePascal / Lazarus
 
#2

Re: Frage zu "this"

  Alt 25. Feb 2006, 08:46
Hi,

Ich versteh den Text so: mit

Code:
class AClass
{
  public AClass():AClass(param)
  {
  }

  public AClass(.../*ein param*/)
  {
    ...
  }
}
wird bei xyz = new AClass() eigentlich xyz = new AClass(param) aufgerufen. Du kannst also einen Konstruktor ersetzen durch den Aufruf eines anderen Kostruktors derselben Klasse, wobei du einige oder alle Parameter durch deine Stzandardwerte ersetzt.

Mfg
FAlter

*** Tippfehler! Man sollte im Forefox 'ne Rechtschreibprüfung für längere Texte einführen.
Felix Alter
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:06 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz