Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.163 Beiträge
 
Delphi 12 Athens
 
#8

Re: Zuweisung in einer anderen Klasse

  Alt 15. Sep 2009, 13:26
Du solltest dich dringend mit Objekten und deren Verwendung beschäftigen.

b := TClassB(a); Ist ein harter TypCast, also man tut so, als wenn A vom Typ TClassB wäre
und erstellt damit keine Kopie!


Delphi-Quellcode:
TClassA = class (TObject)
  ValueA : String;
  function Print : String; virtual;
  procedure Assign(O: TObject); virtual;
end;

TClassB = class (TClassA)
  ValueB : String;
  function Print : String; override;
  procedure Assign(O: TObject); override;
end;

function TClassA.Print : String;
begin
  Result := ValueA;
end;

procedure TClassA.Assign(O: TObject);
begin
  if O is TClassA then
    ValueA := TClassA(O).ValueA;
end;

function TClassB.Print : String;
begin
  Result := inherited + ValueB;
end;

procedure TClassA.Assign(O: TObject);
begin
  inherited;
  if O is TClassB then
    ValueB := TClassB(O).ValueB;
end;
Delphi-Quellcode:
var
  a : TClassA;
  b : TClassB;
begin
  a := TClassA.Create;
  a.ValueA := 'Class A';

  b := TClassB.Create;
  b.Assign(a);
  b.ValueB := 'Class B';
  Memo1.Lines.Add(b.Print);
  Memo1.Lines.Add(a.Print);
end;
Wenn für Objekte vom Typ TClassB immer nur Variablen mit diesem Typ verwendet werden und genauso bei TClassA, dann könnte man auch virtual weglassen und statt override ein reintroduce nehmen.

PS: Overload ist bei dir falsch genutzt und du müßtes Reintroduce verwenden, da du Funktionen verdeckst und nicht "mit anderen Parametern" überlädst.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat