Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi supports für geerbte interfaces? (https://www.delphipraxis.net/115248-supports-fuer-geerbte-interfaces.html)

kaiser1401 9. Jun 2008 09:19


supports für geerbte interfaces?
 
Hallo Leute,

ich habe ein kleines Problem mit Intrfaces und Supports, bzw suche ich eine schönere vorgehensweise als meine jetzige.

Ich habe mehrere Interfaces die voneinander abgeleitet sind. Also in etwa in dieser Art:

Delphi-Quellcode:
type
 IIntf_1 = interface (IInterface)
   procedure proc_1()
  end;

 IIntf_2 = interface (IIntf_1)
   procedure proc_2()
  end;

 IIntf_3 = interface (IIntf_2)
   procedure proc_3()
  end;
Desweiteren ein Object, dass das letzte (und somit auch die beiden anderen) Interfaces implementiert:

Delphi-Quellcode:
 TMyObject_A = (TObject,IIntf_3)
   procedure proc_1;
   procedure proc_2;
   procedure proc_3;
Wenn ich nun über supports abfragen möchte ob ein interface unterstützt wird bekomm ich nur für das IIntf_3 ein true, für 2 und 1 leider nicht.

Deklariere ich das Object wie folgt:

Delphi-Quellcode:
 TMyObject_B = (TObject,IIntf_3,IIntf_2)
   procedure proc_1;
   procedure proc_2;
   procedure proc_3;
bekomme ich auch auf die Abfrage auf die Unterstützung von IIntf_2 ein true. Nun möchte ich aber nicht bei jedem Object alle Interfaces wieder mit angeben müssen, da ja das Angegebene bereits davon abgeleitet ist.


Meine Frage nun: gibt es eine Supports Variante, oder kann man sowas halbwegs simple selber schreiben, die "Parent-Interfaces" berücksichtigt? Also bei MyObject_A auch beim Prüfen auf IIntf_1 und IIntf_2 true zurückgibt?


//
Gibt es vll auch eine Möglichkeit nachdem ich bei der Deklaration angegeben hab welche interfaces unterstüzt werden sollen diese Über die IDE automatisch vervollständigen zu lassen? So muss ich mir immer aus allen Interfaces die Methoden und Properties raussuchen und selber in die deklaration kopieren. Das ist etwas nervig.

shmia 9. Jun 2008 10:50

Re: supports für geerbte interfaces?
 
Das von dir beschriebene Verhalten ist "normal" und auch richtig.
Eine Klasse muss jedes Interface, dass sie implementieren soll deklarieren.
Dabei erbt sie allerdings alle Interfaces der Vorgängerklassen:
Delphi-Quellcode:
TMyObject_A = (TObject,IIntf_1)
   procedure proc_1;
end;
TMyObject_B = (TMyObject_A,IIntf_2)
   procedure proc_2;
end;
TMyObject_C = (TMyObject_B,IIntf_3)
   procedure proc_3;
end;
Also besitzt ein Objekt der Klasse TMyObject_C alle drei Interfaces.

> interfaces unterstüzt werden sollen diese Über die IDE automatisch vervollständigen zu lassen?
Wenn es mit der Klassenvervollständigung (STRG-SHIFT-C) nicht geht, dann kann es deine Delphi Version nicht
obwohl es nützlich wäre.

kaiser1401 9. Jun 2008 10:55

Re: supports für geerbte interfaces?
 
Aber wenn doch die Interfaces schon voneinander abgeleitet sind, warum implementiert TMyObject_C diese dann nicht auch wenn es nicht von TMyObject_B abgeleitet würde? Die Methoden müssen ja vorhanden sein. Wenn ich dann aber mit supports nachfrage ob IIntf_1 unterstüzt wird (was es ja eigentlich tut, die Methoden sind alle da und das verwendete Interface ist von diesem Abgeleitet) bekomme ich ein false. Mir erschließt sich der Sinn dahinter nicht.

Mit Strg+Shift+C gehts leider nicht :-(

shmia 9. Jun 2008 12:24

Re: supports für geerbte interfaces?
 
Jedes Interface, dass implementiert wird braucht einen Eintrag und verbraucht Speicherplatz.
Vielleicht will der Programmierer diesen Speicherplatz nicht verschwenden oder er will mit "sanfter Gewalt" die Leute zwingen sein neueres Interface zu benützten.

Ableiten von Interfaces ist nicht das Gleiche wie Ableiten von Klassen.
Während das Ableiten von Klassen eine empfehlenswerte Technik ist, trifft dies bei Interfaces nicht zu.
Ableiten von Interfaces stellt immer eine Art nachträgliche Verbesserung/Erweiterung dar.

Apollonius 9. Jun 2008 16:41

Re: supports für geerbte interfaces?
 
Rein theoretisch könntest du dir eine eigene Variante von Supports schreiben, aber es ist sehr aufwändig: Du müsstest alle unterstützten Interfaces auslesen und von dir dann von ihnen die Vorgänger holen und vergleichen. Es sollte klar sein, dass da sehr viele Interfaces zusammenkommen.


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