einer eigenen klasse zu eigenschaften hinzufügen ?
Ich hab hier mal n' super einfaches Beispiel gemacht.
Braucht ein TMemo und einen TButton auf dem Formular.
Das zeigt natürlich nur einen Bruchteil der ganzen Geschichte, dafür ist es aber einfach zu verstehen.
Braucht ein TMemo und einen TButton auf dem Formular.
Das zeigt natürlich nur einen Bruchteil der ganzen Geschichte, dafür ist es aber einfach zu verstehen.
Code: Alles auswählen
unit Unit1;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, LResources, Forms, Controls, Graphics, Dialogs, Buttons,
StdCtrls;
type
{ TForm1 }
TForm1 = class(TForm)
Button1: TButton;
Memo1: TMemo;
procedure Button1Click(Sender: TObject);
private
{ private declarations }
public
{ public declarations }
end;
IMyInterface = interface
procedure P1;
end;
{ TB }
TA = class(TInterfacedObject, IMyInterface)
public
procedure P1;
destructor Destroy; override;
end;
{ TB }
TB = class(TInterfacedObject, IMyInterface)
public
procedure P1;
destructor Destroy; override;
end;
var
Form1: TForm1;
implementation
{ TA }
procedure TA.P1;
begin
Form1.Memo1.Lines.Add('A');
end;
destructor TA.Destroy;
begin
Form1.Memo1.Lines.Add('A automatisch freigegeben');
inherited;
end;
{ TB }
procedure TB.P1;
begin
Form1.Memo1.Lines.Add('B');
end;
destructor TB.Destroy;
begin
Form1.Memo1.Lines.Add('B automatisch freigegeben');
inherited;
end;
{ TForm1 }
procedure TForm1.Button1Click(Sender: TObject);
var My: IMyInterface; //Man beachte !
begin
My := TA.Create;
My.P1; //egal ob TA oder TB
My := TB.Create; //TA wird automatisch freigegeben
My.P1;
end;
initialization
{$I unit1.lrs}
end.
-
- Lazarusforum e. V.
- Beiträge: 7192
- Registriert: So 19. Nov 2006, 12:06
- OS, Lazarus, FPC: Linux Mint 19.3
- CPU-Target: AMD
- Wohnort: Oldenburg(Oldenburg)
ich glaube wenn ich code poste würde das nicht viel weiter helfen... also das problem ist folgendes:
ich habe eine klasse:TPaint2BaseOBJ geschrieben für eine aufgabe so.... und jetzt habe ich eine weitere klasse geschrieben: TmyImagelistB diese klasse soll eigenschaften der klasse TPaint2BaseOBJ neue eigenschaften bringen z.b. Imagelist:Tmyimagelistb imagename:String sobalt ich die klasse nicht mehr verwende sollen die eigenschaften verschwinden !
oder haben die das bei lazarus und delphi gleich in einer standart klasse geschrieben ohne es von" ausen" anzufügen !
gut ich werde mal eine beispiel klasse posten:
so ich hoffe das beispiel ist aussage kräftig genug !
ich habe eine klasse:TPaint2BaseOBJ geschrieben für eine aufgabe so.... und jetzt habe ich eine weitere klasse geschrieben: TmyImagelistB diese klasse soll eigenschaften der klasse TPaint2BaseOBJ neue eigenschaften bringen z.b. Imagelist:Tmyimagelistb imagename:String sobalt ich die klasse nicht mehr verwende sollen die eigenschaften verschwinden !
oder haben die das bei lazarus und delphi gleich in einer standart klasse geschrieben ohne es von" ausen" anzufügen !
gut ich werde mal eine beispiel klasse posten:
Code: Alles auswählen
tklasse1 = class(...vererbung)
published
property test1:.....
property test2:.....
property test3:.....
property test4:.....
end;
tklasse2 = class(...vererbung)
published
// diese zwei eigenschaften sollen klasse 1 hinzugefügt werden ohne
// klasse 1 ändern zu müssen... normalerweise würde ich so ein problem mit einer vererbung lösen nur das kann ich nicht weil schon gerbt wird !
property hallo1:.....
property hallo2:.....
end;
MFG
Michael Springwald
Michael Springwald
Ja fast, du kannst ein Klasse von deiner ersten Klasse ableiten, welche dann die zweite Klasse als property zur Verfügung stellt. So bleibt deine erste Klasse unberührt und du hast doch beide Funktionalitäten.pluto hat geschrieben:du meinst also ich sollte eine varbaile in der klasse einfügen die ich erweitern wollte die dann mit der andren klasse zu tuen hat !
naja werde ich wohl so machen müssen *schnif* ich dachte halt das ist noch einen andren weg geben würde !
Ich weiss gar nicht, wieso du *schnifst*, das ist doch kein Problem.
S' ist halt nicht jeden Tag Weihnachten!pluto hat geschrieben:ja doch ich habe mir das irngewie anders vorstellt und zwar so:
addProperty(klasse,klasse2)
und alle eigenscahften der klasse2 werden dann in die klasse hinzugefügt...
so änliche hätte ich es mir vorstellt ! ohne das ich die eigetnliche klasse im code ändern muss !

Du meinst sowas wie multiple Vererbung. Das ist aber auch kein Wundermittel.