Das Problem liegt nicht in TMeineKlasse3.Assign, sondern bei TMeineKlasse1.Assign
Beispiel:
Delphi-Quellcode:
procedure TMeineKlasse1.Assign(Source: TPersistent);
var
begin
if Source.inheritsfrom(TComponent) then begin
inherited; // <-- klappt nicht, weil Source von der Klasse TMeineKlasse 3 ist *
// inherited Assign(TComponent(Source)); // klappt auch nicht
end;
if Source.inheritsfrom(TMeineKlasse1) then begin
Self.X := TMeineKlasse1(Source).X;
Self.Y := TMeineKlasse1(Source).Y;
end;
end;
* dessen
Unit wiederum NICHT in USES der
Unit von TMeineKlasse1 stehen soll.
Fehlermeldung: "TMeineKlasse3 kann nicht zu TMeineKlasse1 zugewiesen werden."
Konkretes Beispiel:
Delphi-Quellcode:
var
Klasse1: TMeineKlasse1;
Klasse3: TMeineKlasse3;
begin
Klasse1 := TMeineKlasse1.Create;
Klasse3 := TMeineKlasse3.Create;
Klasse3.X := 10;
Klasse3.Y := 20;
Klasse3.Z := 30;
Klasse3.Text := '
Hallo!';
// Klasse1.X und Y sind nach wie vor 0
Klasse1.Assign(Klasse3);
^--
Exception
ShowMessage(IntToStr(Klasse1.X));
// Meine Erwartung als korrekte Ausgabe: "10"
Als einzigen Lösungsansatz sehe ich im Moment, die Eigenschaften der TComponent Klasse zu ignorieren. Also kein Inherited aufrufen sondern nur eine leere TMeineKlasse1 neu zu erstellen und die Variablen einfach rüberzukopieren. Da ich keine Werte von TComponent benutze (hoffe/denke ich mal) ist das hier jetzt nicht so tragisch, aber mir geht's hier erstmal um's Prinzip wie es geht, einer Vorfahrenklasse eine Varible seines eigenen Nachfolgers zuzuweisen.
Danke schonmal.