![]() |
Re: Basisklasse und davon abgeleitet drei Standardklassen
Mehrfachvererbung bringt mehr Probleme als Vorteile, deshalb findet man sie nicht in neuren Sprachen wie Java, Delphi, C#, ..., wo man Vererbung per Interfaces präferiert.
|
Re: Basisklasse und davon abgeleitet drei Standardklassen
Zitat:
TEdit wird nicht von Basisklasse abgeleitet. Ich möchte eine Klasse, deren Instanz der eines TEdit entspricht, zusätzlich aber die Eigenschaften aus TBasisklasse übernimmt. Und wie ich schon schrieb: so, wie ich das im Delphi-Code meines ersten Beitrages dargestellt habe, kann das nicht funktionieren; das weiß ich. Aber genau dort liegt ja mein Problem - ich weiß nicht, wie ich dieses Konstrukt erzeugen soll. Edit: was ich nicht möchte, ist soetwas:
Delphi-Quellcode:
Type
TEditklasse = Class(TEdit) private FEigenschaft1: Integer; FEigenschaft2: Integer; FEigenschaft3: Integer; FWind: String; Procedure SetWind(Const Value: Integer); public Property Wind: String read FWind write SetWind; End; TLabelklasse = class(TLabel) private FEigenschaft1: Integer; FEigenschaft2: Integer; FEigenschaft3: Integer; FWind: String; Procedure SetWind(Const Value: Integer); public Property Wind: String read FWind write SetWind; end; TMemoklasse = Class(TMemo) private FEigenschaft1: Integer; FEigenschaft2: Integer; FEigenschaft3: Integer; FWind: String; Procedure SetWind(Const Value: Integer); public Property Wind: String read FWind write SetWind; End; |
Re: Basisklasse und davon abgeleitet drei Standardklassen
Mehrfachvererbung wäre hier sehr praktisch. Du könntest einfach schreiben
Delphi-Quellcode:
und fertig wärst du. Ich habe mir auch schon eine weniger eingeschränkte Form der Mehrfachvererbung gewünscht, als es sie in Delphi gibt. Das
TEditklasse=class(TEdit, TBasisklasse)
![]() |
Re: Basisklasse und davon abgeleitet drei Standardklassen
Zitat:
Wenn doch so viele Leute eine solche Funktionalität gerne hätten - gibt es dann keinen 'Workaround'? Interfaces sind es ja aufgrund der nicht vorhandenen Möglichkeit, Felder etc. zu deklarieren, nicht. Und nein - für mich ist kein Workaround, das Ganze in C-basierten Sprachen zu realisieren :wink: Abgesehen davon, dass ich kein C[x] beherrsche, sind mir meine Arbeitsmittel vorgegeben. |
Re: Basisklasse und davon abgeleitet drei Standardklassen
An Workarounds mangelt es nicht, dafür müsste man aber erst etwas mehr von den Hintergründen erfahren; man möchte schließlich das freakigstmögliche Design-Pattern einsetzen ;) . Z.B. könnte es sinnvoll sein, das ganze als Factory-Interface zu gestalten:
Delphi-Quellcode:
Oder auch einfach als
type
IMyFactory = interface function CreateSomething : TBasisklasse; end; [...] function TMyEdit.CreateSomething; begin Result := TEditklasse.Create; end;
Delphi-Quellcode:
(Alle Angaben ohne Gewähr, hab Interfaces in Delphi nur ein-, zweimal benutzt)
type
IMyExtender = interface function GetSomething : TBasisklasse; property Something : TBasisklasse read GetSomething; end; |
Re: Basisklasse und davon abgeleitet drei Standardklassen
Zitat:
Naja, zu den Hintergründen - den Sinn habe ich ja bereits erläutert, und ich sehe ein, dass Mehrfachvererbung eine nette Sache wäre. Ich habe es jetzt so gelöst, dass ich einfach in der Basisklasse ein Feld 'FControl' und eine entsprechende Property dazu erstellt habe, dem ich dann im Constructor, den ich in den Kindklassen überschreibe, einfach eine Instanz der entsprechenden Klasse zuweise, und erst danach den Constructor der Basisklasse aufrufe. Dann spreche ich das Ganze halt hinterher nicht nur mit dem Instanzennamen an, sondern mit Instanzenname.Control Mit Mehrfachvererbung hätte mir zwar besser gefallen, aber so gehts auch.
Delphi-Quellcode:
Edit: freue mich natürlich noch immer über anderweitige Lösungsmöglichkeiten, wenn Ihr welche habt :stupid:
TBasisklasse = Class
private FControl: TControl; FEigenschaft1: Integer; FEigenschaft2: Integer; FWind: Integer; Procedure SetWind(Const Value: Integer); public Constructor Create(AOwner: TComponent); virtual; Property Control: TControl read FControl; Property Wind: Integer read FWind write SetWind; End; TEditklasse = Class(TBasisklasse) public Constructor Create(AOwner: TComponent); override; End; TLabelklasse = Class(TBasisklasse) Constructor Create(AOwner: TComponent); override; End; TMemoklasse = Class(TBasisklasse) Constructor Create(AOwner: TComponent); override; End; [...] Constructor TBasisklasse.Create(AOwner: TComponent); Begin FEigenschaft1: FControl.Width; FEigenschaft2: FControl.Height; End; Procedure TBasisklasse.SetWind(Const Value: Integer); Begin FWind := Value; FControl.Width := FEigenschaft1 * Value; FControl.Height := FEigenschaft2 * Value; End; Constructor TEditklasse.Create(AOwner: TComponent); Begin FControl := TEdit.Create(AOwner); Inherited; End; Constructor TLabelklasse.Create(AOwner: TComponent); Begin FControl := TLabel.Create(AOwner); Inherited; End; Constructor TMemoklasse.Create(AOwner: TComponent); Begin FControl := TMemo.Create(AOwner); Inherited; End; |
Re: Basisklasse und davon abgeleitet drei Standardklassen
Hier steht nicht viel brauchbares ! Das einzige wäre ein Tedit und ein TMemo. Die besitzen zumindest mal Editier-Funktionalitäten. Ein TLabel hat nicht mal die. Wozu soll dieser unzusammenhängende Kram jetzt zusammengeschmissen werden ? Wird ein spezielles TEdit gebraucht, dann leite das von TEdit ab usw. Die Funktionalität bei TObject (= bei Null) etc. angefangen selber einzubauen ist völliger Blödsinn. :mrgreen:
|
Re: Basisklasse und davon abgeleitet drei Standardklassen
Wenn ich mich jetzt nicht vollkommen vertue, könnten
![]() |
Re: Basisklasse und davon abgeleitet drei Standardklassen
Hallo,
wenn ich mich recht erinnere gibt es für Delphi mittlerweile ClassHelper. Mal hier im Forum suchen. Wenn man keine property sondern nur eine Setter und Getter Methode für WInd verwendet könnte man einen Classhelper verwenden. |
Re: Basisklasse und davon abgeleitet drei Standardklassen
Ich habe auch schon daran gedacht, aber Helferklassen können keine Felder enthalten.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:13 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-2025 by Thomas Breitkreuz