AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

eine Klasse mit zwei Vorfahren, geht das?

Ein Thema von Marco Steinebach · begonnen am 19. Mär 2024 · letzter Beitrag vom 25. Mär 2024
Antwort Antwort
Marco Steinebach

Registriert seit: 4. Aug 2006
491 Beiträge
 
Delphi 5 Enterprise
 
#1

eine Klasse mit zwei Vorfahren, geht das?

  Alt 19. Mär 2024, 17:13
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
Marco Steinebach
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.147 Beiträge
 
Delphi 12 Athens
 
#2

AW: eine Klasse mit zwei Vorfahren, geht das?

  Alt 19. Mär 2024, 17:40
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;
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu (19. Mär 2024 um 17:45 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.349 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: eine Klasse mit zwei Vorfahren, geht das?

  Alt 19. Mär 2024, 18:05
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.
Angehängte Dateien
Dateityp: zip ImplementsDemo.zip (90,0 KB, 55x aufgerufen)
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  Mit Zitat antworten Zitat
QuickAndDirty

Registriert seit: 13. Jan 2004
Ort: Hamm(Westf)
1.883 Beiträge
 
Delphi 12 Athens
 
#4

AW: eine Klasse mit zwei Vorfahren, geht das?

  Alt 20. Mär 2024, 11:12
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...
Andreas
Monads? Wtf are Monads?
  Mit Zitat antworten Zitat
Rollo62

Registriert seit: 15. Mär 2007
3.908 Beiträge
 
Delphi 12 Athens
 
#5

AW: eine Klasse mit zwei Vorfahren, geht das?

  Alt 20. Mär 2024, 11:28
Es gibt eine Möglichkeit. Die ist zwar auch nicht ohne zusätzlichem Aufwand, ...


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.

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.

Geändert von Rollo62 (20. Mär 2024 um 11:31 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.349 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: eine Klasse mit zwei Vorfahren, geht das?

  Alt 20. Mär 2024, 12:26
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.
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  Mit Zitat antworten Zitat
Marco Steinebach

Registriert seit: 4. Aug 2006
491 Beiträge
 
Delphi 5 Enterprise
 
#7

AW: eine Klasse mit zwei Vorfahren, geht das?

  Alt 25. Mär 2024, 06:39
Hallo zusammen,
Herzlichen Dank für eure Antworten. Na dann: auf zum Lesen!
Herzlich grüßt
Wandogau
Marco Steinebach
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:48 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz