![]() |
eine Klasse mit zwei Vorfahren, geht das?
Hallo zusammen,
Ich habe zwei Klassen, die eine von TEdit abgeleitet, die andere von TCombobox. Beide sollen mehrere neue Eigenschaften erhalten, die ich gern auch in einer Klasse speichern würde, also für beide die selben Eigenschaften. Nennen wir sie TNew. Kann ich das irgendwie elegant lösen? Sprich hätte meine neue Klasse TMyEdit dann TEdit und TNew als Vorfahren und würde beide vereinen. Herzlich grüßt Wandogau |
AW: eine Klasse mit zwei Vorfahren, geht das?
Nein, Mehrfachvererbung gibt es nicht.
Was geht, ist in beiden Komponenten ein gemeinsames Interface zu implementieren, für den Zugriff auf diese Eigenschaften. Beachte: Interfaces bei TComponent-Nachfahren haben keine Referenzzählung, also es ist ratsam die Interface-Variable dann immer nur kurz bei Verwendung deklariert zu haben und anschließend sofort wieder freizugeben. Wirklich Delphi 5? PS: Seit 'ner Weile kann man (wenn man sich sicher ist, dass eine Interface unterstützt wird), das Objekt einfach mit AS ins Interface casten.
Delphi-Quellcode:
procedure TForm25.FormDblClick(Sender: TObject);
begin var C := (Self as IInterfaceComponentReference).GetComponent; end; |
AW: eine Klasse mit zwei Vorfahren, geht das?
Liste der Anhänge anzeigen (Anzahl: 1)
Es gibt eine Möglichkeit. Die ist zwar auch nicht ohne zusätzlichem Aufwand, aber sehr elegant zu nutzen:
Schieb die Zusatzproperties einfach in eine eigene Klasse und koppele diese mit implements. Beispiel anbei. |
AW: eine Klasse mit zwei Vorfahren, geht das?
Mittels Interface kannst du machen das beide KLassen in der selben variable gespeichert werden können oder mit den selben parametern kompatibal sind.
Evtl ist es möglich über THelperComponent oder so ähnlich beide klassen um die fähigkeiten einer helperklasse zu erweitern. Vererbung hat seit einigerzeit eh ein Popularitätsproblem und viele sagen man sollte Klassen lieber mittels Komposition um weitere Fähigkeiten erweitern. So gesehen könntest du ein TNewControl auch einfach Objekte beider Klassen besitzen lassen und auf diese weise beide Verhalten exposen... |
AW: eine Klasse mit zwei Vorfahren, geht das?
Zitat:
Das finde ich aber sowas von gar nicht, das ist nur EINMAL etwas mehr Aufwand, dafür kann dann aber allen deinen Komponenten ein gewünschtes Verhalten zugeordnet werden. Das ist meiner Meinung nach den leichten Mehraufwand allemal Wert. :-D Dafür kannst du das nutzen, um - Zusätzliche Funktionen bereitzustellen ( Sicherheitsabfragen, Verifizieren, ... ) - Fehler in den Basiskomponenten abfangen und fixen - Komponenten über verschiedene Versionen anpassen und gleiches Verhalten herstellen - Ein gemeinsames, neues Verhalten für mehrere Komponenten zu implementieren (z.B. Styling, Logging, ...) - Alles das, ohne neue Custom-Komponenten anlegen und pflegen zu müssen (funktioniert auch ohne Installation von KomponentenPackages) - uvm. |
AW: eine Klasse mit zwei Vorfahren, geht das?
Ich finde auch, dass es den Aufwand wert ist. Das war nicht negativ gemeint.
Sehr entscheidend ist noch ein anderer Aspekt: Du kannst die auf diese Weise angedockte Funktionalität nicht nur zur Laufzeit ändern, was bei Vererbung nicht möglich wäre, sondern du kannst sogar im Getter der Property entscheiden, welche Referenz du zur Ausführung zurück lieferst. |
AW: eine Klasse mit zwei Vorfahren, geht das?
Hallo zusammen,
Herzlichen Dank für eure Antworten. Na dann: auf zum Lesen! Herzlich grüßt Wandogau |
Alle Zeitangaben in WEZ +1. Es ist jetzt 11: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 by Thomas Breitkreuz