Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - richtig vererben?


M.Mü - Di 12.05.09 16:43
Titel: richtig vererben?
Hallo,

ich habe folgendes Problem:
Ich habe die Klasse TTabSheet abgeleitet, um sie mit zwei Funktionen zu erweiteren, die Konfigurationsdaten aus einer Datei auslesen bzw. hineinschreiben. Angestoßen werden diese durch entsprechende Funktionen im TPageControl, dass ich ebenfalls abgeleitet und erweitert habe. Kurz skizziert sähe das ganze wie folgt aus.


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
  TConfigSheet = class(TTabSheet)
  public
    procedure WriteToConfigFile(ARoot: IXMLNode);
    procedure ReadFromConfigFile(ARoot: IXMLNode);
  end;

  TConfigPageControl = class(TPageControl)
  public
    procedure WriteToConfigFile(FileName: string);
    procedure ReadFromConfigFile(FileName: string);
    property irgendwas: string read ...
  end;


Ausserdem verwenden die ConfigSheets auch Variablen aus dem ConfigPageControl. (property irgendwas)

Die Frage ist nun: Wie kann ich es einrichten, dass beide jeweils nur den Partner akzeptieren? Ich will vermeiden, dass mein ConfigPageControl auch normale TabSheets annimmt bzw. ein normales PageControl meine ConfigSheets annimmt. Beides würde ja unweigerlich zum Fehler führen.

VG M.Mü


jaenicke - Di 12.05.09 18:47

Das Problem ist, dass TPageControl.InsertPage nicht virtuell ist. Du kannst diese Methode also nicht überschreiben. Deshalb wird die Annahme eines TTabSheet schlecht zu verhindern sein. Durch neueinführen (reintroduce) von InsertPage könnte es klappen.

Dass dein TabSheet auf ein falsches PageControl kommt kannst du aber gut verhindern indem du die property PageControl selbst neu einführst.