Wenn dies Ihr erster Besuch hier ist,
lesen Sie bitte zuerst die Hilfe - Häufig gestellte Fragen
durch. Sie müssen sich vermutlich registrieren,
bevor Sie Beiträge verfassen können. Klicken Sie oben auf 'Registrieren', um den Registrierungsprozess zu
starten. Sie können auch jetzt schon Beiträge lesen. Suchen Sie sich einfach das Forum aus, das Sie am meisten
interessiert.
Hi Sebastian,<br>
<br>
für Einzelheiten kannst Du mal versuchen in der Hilfe nach<br>
TPersistent.Assign suchen, und sehen, inwieweit Du damit klarkommst.<br>
<br>
Kernaussage ist:<br>
Bei der Verwendung von Assign erhält das Ziel (StrListA) eine Kopie<br>
der Quelle (StrListB), bei der Verwendung von := wird nur ein neuer<br>
Verweis auf die gleichen Daten erzeugt.<br>
Hast Du also die Daten mit := zugewiesen, wirken sich Änderungen in<br>
StrListA genauso auf die Daten in StrListB aus, bei Assign nicht.<br>
Ich gehe mal davon aus, dass StrListA und B vom Typ TStringList sind.<br>
Weist Du mit := zu und gibst StrListB mit Free wieder frei, laufen<br>
Zugriffe auf StrListA auf Fehler, da die Stringliste nicht mehr existiert<br>
bei Zuweisung mit Assign geschieht das nicht, da StrListA eine Kopie enthält.<br>
<br>
Ciao<br>
Chri
Hallo Christian,<br>grundsätzlich stimmt es schon. Aber wie immer gibt es auch Ausnahmen. Bei der Anweisung Canvas.Font:=aFont wird die SetFont Methode von Canvas aufgerufen. <br>
procedure TCanvas.SetFont(Value: TFont);<br>
begin<br>
FFont.Assign(Value);<br>
end;<br>
Dort wird dann implizit Assign aufgerufen. Der Aufruf hat dann fast den gleichen Effekt wie Canvas.Font.Assign(aFont). Aber nur fast. Denn bei Canvas.Font.Assign(aFont) wird <u>nicht</u> die SetMethode aufgerufen. Das könnte dann zu Problemen führen, wenn die SetMethode noch etwas mehr machen soll als die Zuweisung der Schriftart.<br>Jens Schuman
Hallo,<br>
StrListA := StrListB ist eine reine Zeigerzuweisung,<br>
dh. danach zeigen beide auf das gleiche Objekt.<br>
Wurde vorher mit StrListA:=TStringList.Create eine Instanz erzeugt,<br>
so ist nach der obigen Zuweisung darauf kein Zugriff mehr möglich,<br>
da der Objektzeiger ja mit StrListB überschrieben wurde.<br>
Wenn nun zB. dieses Objekt mit StrListA.Free freigegeben wird,<br>
zeigt StrListB auf ein nicht mehr gültiges Objekt und ein Zugriff<br>
über StrListB.Irgendwas führt zum Rumms.<br>
Die Assign-Methode dagegen kopiert je nach Implementation (siehe Hilfe) bestimmte Felder des Quellobjekts in das Zielobjekt.<br>
Das Verhalten von Assign ist abhängig vom Objekttyp,<br>
wer absolute Kontrolle braucht sollte sich die jeweilige<b>
Implementation in der VCL anschauen.
Bei TStringList bzw. TStrings werden die Strings kopiert,<br>
dabei werden beim Zielobjekt vorher vorhandene Strings mit Clear gelöscht.<br>
Ich hoffe das war jetzt einigermaßen verständlich:-)<br>
<br>
Gruß<br>
Harr
Comment