[gelöst] Ableiten von Klassen / Listklassen

Für Fragen zur Programmiersprache auf welcher Lazarus aufbaut
Antworten
MacWomble
Lazarusforum e. V.
Beiträge: 999
Registriert: Do 17. Apr 2008, 01:59
OS, Lazarus, FPC: Mint 21.1 Cinnamon / FPC 3.2.2/Lazarus 2.2.4
CPU-Target: Intel i7-10750 64Bit
Wohnort: Freiburg

[gelöst] Ableiten von Klassen / Listklassen

Beitrag von MacWomble »

Ich versuche mich seit kurzer Zeit in OOP, es fehlt mir also noch der Durchblick :oops: (Thema tiOPF)
Ich habe mal ein Teilbereich meines an anderer Stelle besprochenen Problems in das richtige Thema sortiert um das ganze übersichtlicher zu gestalten.
Es geht darum, das ich eine Item-Klasse habe

Code: Alles auswählen

TBaseContactTitleClass = class of TBaseContactTitle;
{ Generated Class: TBaseContactTitle}
TBaseContactTitle = class(TtiObject)
protected
FTitle: String;
FBusinessList: TBaseBusinessList;
procedure   SetTitle(const AValue: String); virtual;
procedure   SetSearchTitle(const AValue: String); virtual;
procedure   SetBusinessList(const AValue: TBaseBusinessList); virtual;
public
procedure   Read; override;
procedure   Save; override;
published
property    Title: String read FTitle write SetTitle;
end;
 


welche in einer Listklasse gesammelt wird:

Code: Alles auswählen

 
TBaseContactTitleList = class(TtiMappedFilteredObjectList)
private
class var FItemClass: TBaseContactTitleClass;
protected
procedure   SetItems(i: integer; const AValue: TBaseContactTitle); reintroduce;
function    GetItems(i: integer): TBaseContactTitle; reintroduce;
public
property    Items[i:integer] : TBaseContactTitle read GetItems write SetItems;
procedure   Add(AObject: TBaseContactTitle); reintroduce;
procedure   Read; override;
procedure   Save; override;
class property ItemClass: TBaseContactTitleClass read FItemClass write FItemClass;
{ Return count (1) if successful. }
function    FindByOID(const AOID: string): integer;
end;


Nun möchte ich beide Klassen in eine anderen Unit ableiten, da sie in der Quelle nicht verändert werden dürfen.
Es sollen dann weitere Properties, Funktionen und Prozeduren in der Item-Klasse hinzugefügt werden.

Das geht ja vereinfacht so:

Code: Alles auswählen

 
TContactTitle = class(TBaseContactTitle)
    constructor Create; override;
  end;
 
TContactTitles = class(TBaseContactTitleList)
    constructor Create; override;
  end;
 


aber wie bekomme ich in die abgeleitete Listklasse die abgeleiteten Items (nicht TBaseContactTitle sondern TContactTitle) ?

Gruß Klaus
Zuletzt geändert von MacWomble am Do 16. Mär 2017, 11:09, insgesamt 1-mal geändert.
Alle sagten, dass es unmöglich sei - bis einer kam und es einfach gemacht hat.

Benutzeravatar
theo
Beiträge: 10467
Registriert: Mo 11. Sep 2006, 19:01

Re: Ableiten von Klassen / Listklassen

Beitrag von theo »

Es wäre hilfreich, wenn du schreiben könntest, was genau deine Frage ist und wo du nicht weiter kommst.

Ich vermute mal, du suchst nach der Vorwärtsdeklaration einer Klasse:

Code: Alles auswählen

type
  TDeineKlasse = class;

MacWomble
Lazarusforum e. V.
Beiträge: 999
Registriert: Do 17. Apr 2008, 01:59
OS, Lazarus, FPC: Mint 21.1 Cinnamon / FPC 3.2.2/Lazarus 2.2.4
CPU-Target: Intel i7-10750 64Bit
Wohnort: Freiburg

Re: Ableiten von Klassen / Listklassen

Beitrag von MacWomble »

Ich denke, die notwendige Frage steht da ....

Ich leite die Listenklasse ab, was ja funktioniert, außer dass die Listenklasse noch auf die Basisklasse der Items verweist. Da diese aber auch abgeleitet werden muss, muss diese entsprechend in der abgeleiteten Listenklasse berücksichtigt werden.
Alle sagten, dass es unmöglich sei - bis einer kam und es einfach gemacht hat.

MacWomble
Lazarusforum e. V.
Beiträge: 999
Registriert: Do 17. Apr 2008, 01:59
OS, Lazarus, FPC: Mint 21.1 Cinnamon / FPC 3.2.2/Lazarus 2.2.4
CPU-Target: Intel i7-10750 64Bit
Wohnort: Freiburg

Re: Ableiten von Klassen / Listklassen

Beitrag von MacWomble »

Sorry wollte das grafisch abbilden, bekomme das aber hier nicht hin - deswegen versuche ich es hier nochmal ganz allgemein zu erklären:

Die TBasis...-Klasse und die TBasis...List-Klasse sind in der unit_bom.pas enthalten, welche nicht verändert werden darf.
Die TBasis...List-Klasse enthält als Items Instanzen der TBasis...-Klasse.

Deswegen soll eine unitmodel.pas die beiden Klassen als T...-Klassen abbilden, damit diese erweitert werden können.

Die abgeleitete T...List-Klasse enthält aber die Items der TBasis...Klasse anstelle der T...-Klasse, was nicht sein soll.
Alle sagten, dass es unmöglich sei - bis einer kam und es einfach gemacht hat.

MacWomble
Lazarusforum e. V.
Beiträge: 999
Registriert: Do 17. Apr 2008, 01:59
OS, Lazarus, FPC: Mint 21.1 Cinnamon / FPC 3.2.2/Lazarus 2.2.4
CPU-Target: Intel i7-10750 64Bit
Wohnort: Freiburg

Re: Ableiten von Klassen / Listklassen

Beitrag von MacWomble »

Ok, habs gefunden

im create der Listklasse:

ItemClass:=TAbgelKlasse;
Alle sagten, dass es unmöglich sei - bis einer kam und es einfach gemacht hat.

Antworten