AGB  ·  Datenschutz  ·  Impressum  







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

supports für geerbte interfaces?

Ein Thema von kaiser1401 · begonnen am 9. Jun 2008 · letzter Beitrag vom 9. Jun 2008
Antwort Antwort
kaiser1401

Registriert seit: 6. Mär 2006
Ort: Gescher
157 Beiträge
 
Delphi 7 Professional
 
#1

supports für geerbte interfaces?

  Alt 9. Jun 2008, 10:19
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.
inc(i);
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#2

Re: supports für geerbte interfaces?

  Alt 9. Jun 2008, 11:50
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.
Andreas
  Mit Zitat antworten Zitat
kaiser1401

Registriert seit: 6. Mär 2006
Ort: Gescher
157 Beiträge
 
Delphi 7 Professional
 
#3

Re: supports für geerbte interfaces?

  Alt 9. Jun 2008, 11:55
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
inc(i);
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#4

Re: supports für geerbte interfaces?

  Alt 9. Jun 2008, 13:24
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.
Andreas
  Mit Zitat antworten Zitat
Apollonius

Registriert seit: 16. Apr 2007
2.325 Beiträge
 
Turbo Delphi für Win32
 
#5

Re: supports für geerbte interfaces?

  Alt 9. Jun 2008, 17:41
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.
Wer erweist der Welt einen Dienst und findet ein gutes Synonym für "Pointer"?
"An interface pointer is a pointer to a pointer. This pointer points to an array of pointers, each of which points to an interface function."
  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 12:01 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