AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Vererbung und klassenspezifische Methoden

Ein Thema von SProske · begonnen am 21. Aug 2015 · letzter Beitrag vom 21. Aug 2015
 
SProske

Registriert seit: 16. Feb 2015
Ort: Halle/S.
116 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#1

Vererbung und klassenspezifische Methoden

  Alt 21. Aug 2015, 11:28
Ich habe eine Grundklasse, von der mehrere Klassen abgeleitet sind. Diese Grundklasse stellt einen Konstruktor zur Verfügung, um eine neue Instanz mit gleichen Eigenschaften zu erzeugen. Außerdem eine Methode um die Eigenschaften zu kopieren.

In der abgeleiteten Klasse verwende ich dann diesen Konstruktor.

Delphi-Quellcode:
interface

type

  TBaseClass = class
  strict protected
  public
    constructor CreateAsCopy(const aFrom: TBaseClass);virtual;
    procedure AssignProps(const aFrom: TBaseClass);virtual;
  end;

  TAdvancedClass = class(TBaseClass)
  strict protected
    FName: string;
  public
    property Name: string read FName write FName;

    procedure AssignProps(const aFrom: TBaseClass);override;
  end;

implementation


procedure TBaseClass.AssignProps(const aFrom: TBaseClass);
begin
  //
end;

constructor TBaseClass.CreateAsCopy(const aFrom: TBaseClass);
begin
  AssignProps(aFrom);
end;

procedure TAdvancedClass.AssignProps(const aFrom: TBaseClass);
begin
  inherited AssignProps(aFrom);
  FName := TAdvancedClass(aFrom).Name;
end;

end.
Delphi-Quellcode:
var
  F1, F2: TAdvancedClass;
begin
  F1 := TAdvancedClass.Create;
  try
    F1.Name := 'Test';
    F2 := TAdvancedClass.CreateAsCopy(F1);
    try
      Writeln(F2.Name);
      ReadLn;
    finally
      F2.Free;
    end;
  finally
    F1.Free;
  end;
end.
Das funktioniert soweit, mir wird korrekterweise Test ausgegeben. Allerdings sind mir die expliziten Type-Casts in AssignProps ein Dorn im Auge. Lieber hätte ich es so:

Delphi-Quellcode:
TAdvancedClass = class(TBaseClass)
  strict protected
    FName: string;
  public
    property Name: string read FName write FName;

    procedure AssignProps(const aFrom: TAdvancedClass);reintroduce;
  end;

procedure TAdvancedClass.AssignProps(const aFrom: TAdvancedClass);
begin
  inherited AssignProps(aFrom);
  FName := aFrom.Name;
end;
Dann erhalte ich aber als Ausgabe nicht mehr 'Test', sondern einen Leerstring. Wie kann ich es so anpassen, dass in meiner abgeleiteten Klasse ein "AssignProps" zur Verfügung habe, dass auch mit dieser Klasse funktioniert - und nicht mit der Grundklasse und dann Type-Casts auf die abgeleitete?

PS: Die Überschrift gefällt mir selber nicht, etwas besseres ist mir aber auch nicht wirklich eingefallen.
Sebastian
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:19 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 by Thomas Breitkreuz