Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi von zwei Klassen erben ? (https://www.delphipraxis.net/73787-von-zwei-klassen-erben.html)

gmc616 24. Jul 2006 02:28


von zwei Klassen erben ?
 
Moin moin Delphianer,

ist es möglich eine Klasse zu erstellen, die von zwei Klassen erbt?

ein ganz simples Beispiel:
Delphi-Quellcode:
Type TKlasseA = class
  public
    strA : string;
End;

Type TKlasseB = class
  public
    IntB : integer;
End;
Die ZielKlasse soll dann so aussehen:
Delphi-Quellcode:
Type TKlasseC = class (TKlasseA + TKlasseB)
  public
    strA : string; // aus TKlasseA
    IntB : integer; // aus TKlasseB
End;
Die TKlasseC soll von den beiden Klassen TKlasseA und TKlasseB erben und so die Variablen strA und IntB anbieten können.
Ist sowas möglich? Wenn ja, wie?

Grüße
gmc

mkinzler 24. Jul 2006 05:30

Re: von zwei Klassen erben ?
 
Delphi unterstützt, wie auch java + c# keine Mehrfachvererbung.

Robert Marquardt 24. Jul 2006 05:30

Re: von zwei Klassen erben ?
 
Es ist nur die Vererbungsvariante Aggregation moeglich und das nur per Interface.
Schau dich doch einfach in den Delphi-Sourcen um.
Classes.TStreamAdapter waere ein Beispiel. Es implementiert einen TStream der sich auf einen OLE IStream von Windows stuetzt.

Es ist also nur moeglich mehrere Interfaces in einer Delphi-Klasse zu implementieren.
Ich habe da schon Beispiele mit Vererbung von 6-8 Interfaces gesehen.

Jens Schumann 24. Jul 2006 06:38

Re: von zwei Klassen erben ?
 
Zitat:

Zitat von Robert Marquardt
Es ist also nur moeglich mehrere Interfaces in einer Delphi-Klasse zu implementieren.
Ich habe da schon Beispiele mit Vererbung von 6-8 Interfaces gesehen.

Wenn ich diese Interfacesache richtig verstanden habe sieht es zwar aus wie eine Vererbung ist aber keine. Jedenfalls keine
Vererbung im OOP Sinn.
Mit der Angabe von
Delphi-Quellcode:
TMYInterfaceClass = class(TInterfacedObjekt,IMyInt1, IMyInt2)
sagst man, dass die Klasse von TInterfacedObjekt erbt (OOP-mäßig) und zusätzlich die
Interfaces IMyInt1 u. IMyInt2 unterstützt. Für diese Unterstützung müssen aber in
der Klasse TMYInterfaceClass die Methoden der Interfaces IMyInt1 u. IMyInt2 implmentieren.
Das ist der kleine aber feine Unterschied.

Großer Vorteil: Die damit einhergehende Zuweisungskompatibilität zu den Interfaces IMyInt1 u. IMyInt2

lizardking 24. Jul 2006 06:47

Re: von zwei Klassen erben ?
 
Zitat:

Zitat von Robert Marquardt
Es ist nur die Vererbungsvariante Aggregation moeglich und das nur per Interface.

Hab ich irgendwas verpasst oder seit wann ist Aggregation eine "Vererbungsvariante" ? :?:

Elvis 24. Jul 2006 07:05

Re: von zwei Klassen erben ?
 
Zitat:

Zitat von Jens Schumann
Für diese Unterstützung müssen aber in
der Klasse TMYInterfaceClass die Methoden der Interfaces IMyInt1 u. IMyInt2 implmentieren.
Das ist der kleine aber feine Unterschied.

Dank interface delegation in Delphi32 kann die Implementierung an eine weitere Klasse delegiert werden. Und dadurch kann man diese Funktionialität an mehreren Stellen benutzen.
Siehe hier.

Jens Schumann 24. Jul 2006 08:02

Re: von zwei Klassen erben ?
 
Zitat:

Zitat von ElvisDank
interface delegation in Delphi32 kann die Implementierung an eine weitere Klasse delegiert werden. Und dadurch kann man diese Funktionialität an mehreren Stellen benutzen.
Siehe hier.

Danke

gmc616 24. Jul 2006 11:56

Re: von zwei Klassen erben ?
 
Hmmm ... per Interface also. Sieht so aus, als ob mir das genügen würde.
Dann werd ich mich mal über Interfaces belesen und das ausprobieren.

Danke euch. :thumb:


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:09 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