Thema: Delphi Wirkliche Unterschiede??

Einzelnen Beitrag anzeigen

Hobbycoder

Registriert seit: 22. Feb 2017
930 Beiträge
 
#18

AW: Wirkliche Unterschiede??

  Alt 24. Apr 2017, 12:37
Delphi-Quellcode:
var Adresslist: TStringlist;

Adresslist.Add(xxxx);
Adresslist.Add(xxxx);
Adresslist.Add(xxxx);
Adresslist.Add(xxxx);
Ist klar, es werden 4 Instanzen von irgendwas unter AddressList

Das ist definitiv immer die gleiche Instanz und auch immer die gleiche Add-Methode.
In einem With-Konstrukt würde ich das allerdings so schhreiben:
Delphi-Quellcode:
with Adresslist do begin
Add(xxxx);
Add(xxxx);
Add(xxxx);
Add(xxxx);
end;
Entspricht dem gleichen wie in Beispiel 1.


Nach dem Angetroffenen Konstrukt ginge dies offenbar aber auch so:
Delphi-Quellcode:
with Adresslist.Add do begin
y:=xxxx;
y:=xxxx;
fy:=xxxx;
dy:=xxxx;
end;
Ist aber eben nur 1 Instanz von Irgendwas, wo jetzt werte für die Eigenschaften y, y, fy und dy zugewiesen werden

Die Frage ist also, was liefert die Methode Add überhaupt zurück?

Denn ich könnte ja folgendes im Sourcecode von TAddresslist schreiben:
Delphi-Quellcode:
function TAdressList.Add(Name: string): integer;
var
  Adress: TAdress;
begin
  Adress: TAdress.create;
  Adress.Name:=Name;
  self.Add(Adress);
  Result:=self.Count-1;
end;
Jetzt kannst du als AdressList.Add('Willi') ausführen,
aber
With AddressList.Add do
Name:='Willi'

hagelt es eine Exception.

Würde da aber stehen:
Delphi-Quellcode:
function TAdressList.Add(Name: string): TAdress;
var
  Adress: TAdress;
begin
  Adress: TAdress.create;
  Adress.Name:=Name;
  self.Add(Adress);
  Result:=Adress;
end;
dann könnte man so oder so arbeiten.

Entscheidet ist aber immer noch dass jedes Add eine neue Instanz erzeugt.
Delphi-Quellcode:
AdressList.Add('Willi');
AdressList.Add('Willi');
AdressList.Add('Willi');
AdressList.Add('Willi');
Erzeugt 4 Adresseinträge die alle Willi heißen

Aber
Delphi-Quellcode:
with AdressList.Add do
begin
  Name:='Willi';
  Name:='Willi';
  Name:='Willi';
  Name:='Willi';
end;
Erzeugt 1 Adresseinttrag der Willi heißt.

Es ist also entscheidend die Methode Add aussieht.

Möglicherweise habe ich auch die Frage falsch verstanden.
Gruß Hobbycoder
Alle sagten: "Das geht nicht.". Dann kam einer, der wusste das nicht, und hat's einfach gemacht.
  Mit Zitat antworten Zitat