![]() |
AW: Wirkliche Unterschiede??
![]() |
AW: Wirkliche Unterschiede??
Zitat:
Zum zweiten, einmal ist es eine Instanz und einmal sind es 4 Instanzen. Ist für mich ein entscheidender unterschied. Zum dritten, was weiß ich denn, was in der Add-Methode steht, und welche Parameter du da überhaupt übergeben kannst, oder ob es da überladene Methoden gibt. Schau doch mal nach. Fakt ist jedenfalls, dass With..do alles mit einer Instanz mache und 4 mal x.Add() mit 4. |
AW: Wirkliche Unterschiede??
HI DeddyH
Zitat:
Delphi-Quellcode:
nicht funktionierte.
MapRules.Add(PrecMax := 2);
Daher auch meine Vermutung, dass Add eine Klasse mit dem Property PrecMax sein müsste. Aber eben: wer nennt seine Klasse schon 'Add'?? @Bernhard Geyer: Die Demo ist das program Indices aus Object Pascal\Database\FireDAC\Samples\Comp Layer\TFDQuery, falls das interessiert. Gruss Delbor |
AW: Wirkliche Unterschiede??
Jetzt mal blöd gefragt, worum geht es hier eigentlich noch?
Das Zitat:
Zitat:
|
AW: Wirkliche Unterschiede??
Hi Hobbycoder
Zitat:
Delphi-Quellcode:
Das ist definitiv immer die gleiche Instanz und auch immer die gleiche Add-Methode.
var Adresslist: TStringlist;
Adresslist.Add(xxxx); Adresslist.Add(xxxx); Adresslist.Add(xxxx); Adresslist.Add(xxxx); In einem With-Konstrukt würde ich das allerdings so schhreiben:
Delphi-Quellcode:
Nach dem Angetroffenen Konstrukt ginge dies offenbar aber auch so:
with Adresslist do begin
Add(xxxx); Add(xxxx); Add(xxxx); Add(xxxx); end;
Delphi-Quellcode:
@bra:
with Adresslist.Add do begin
y:=xxxx; y:=xxxx; fy:=xxxx; dy:=xxxx; end; Zitat:
Gruss Delbor PS: Das hier hab ich allerdings bis jetzt übersehen (Antwort 11 von Towmuz): Zitat:
|
AW: Wirkliche Unterschiede??
Delphi-Quellcode:
So oder so ähnlich dürfte die Konstellation aussehen. Der Aufruf von Add führt dazu, dass TMyItemList eine neue Instanz von TMyItem erzeugt, diese in seiner internen Liste ablegt und zurückgibt. Das bedeutet, dass mit jedem Aufruf von Add eine neue Instanz erzeugt und zurückgegeben wird. Jetzt klarer?
type
TMyItem = class ... end; TMyItemList = class ... function Add: TMyItem; end; |
AW: Wirkliche Unterschiede??
Hi DeddyH
Zitat:
Mein Fehler war offensichtlich, dass ich die Unterschiede von Collections und Listen bisher nicht kannte. Mit ersteren hab ich noch nicht wirklich aktiv gearbeitet. Gruss Delbor |
AW: Wirkliche Unterschiede??
Zitat:
Zitat:
Zitat:
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:
Jetzt kannst du als AdressList.Add('Willi') ausführen,
function TAdressList.Add(Name: string): integer;
var Adress: TAdress; begin Adress: TAdress.create; Adress.Name:=Name; self.Add(Adress); Result:=self.Count-1; end; aber With AddressList.Add do Name:='Willi' hagelt es eine Exception. Würde da aber stehen:
Delphi-Quellcode:
dann könnte man so oder so arbeiten.
function TAdressList.Add(Name: string): TAdress;
var Adress: TAdress; begin Adress: TAdress.create; Adress.Name:=Name; self.Add(Adress); Result:=Adress; end; Entscheidet ist aber immer noch dass jedes Add eine neue Instanz erzeugt.
Delphi-Quellcode:
Erzeugt 4 Adresseinträge die alle Willi heißen
AdressList.Add('Willi');
AdressList.Add('Willi'); AdressList.Add('Willi'); AdressList.Add('Willi'); Aber
Delphi-Quellcode:
Erzeugt 1 Adresseinttrag der Willi heißt.
with AdressList.Add do
begin Name:='Willi'; Name:='Willi'; Name:='Willi'; Name:='Willi'; end; Es ist also entscheidend die Methode Add aussieht. Möglicherweise habe ich auch die Frage falsch verstanden. |
AW: Wirkliche Unterschiede??
Hi Hobbcoder
Zitat:
Zitat:
Die TCollectionsmethode Add erzeugt ein TCollectionItemsObject und fügt dieser der Collection hinzu. Die TStringsmethode Add fügt dem TSringsobjekt einen String oder eben auch eine Stringinstanz hinzu, erzeugt dabei allerdings kein neues Objekt (Item ist ein TString). Zitat:
Gruss Delbor |
AW: Wirkliche Unterschiede??
Das hat doch nichts mit Liste oder Collection zu tun, sondern rein damit, wie der Rückgabewert (im Bezug auf den Datentyp) der Add-Methode deklariert ist. TKlasse1 und TKlasse2 können ja beide eine Add-Methode besitzen, die aber völlig unabhängig voneinander sind und auch unterschiedliche Typen besitzen können. Anhand des Codes aus dem Ausgangsbeitrag kann es aber IMO nur so sein, dass ein komplexeres Konstrukt, d.h. entweder eine Klasseninstanz, ein Interface oder ein Record, zurückgegeben wird.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:30 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz