AGB  ·  Datenschutz  ·  Impressum  







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

Events für Interfaces ?

Ein Thema von himitsu · begonnen am 28. Apr 2010 · letzter Beitrag vom 28. Apr 2010
Antwort Antwort
Benutzerbild von himitsu
himitsu

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

Events für Interfaces ?

  Alt 28. Apr 2010, 13:49
Tachchen,

bei einem Objekt würde ich ein Event ja so Deklarieren
Delphi-Quellcode:
TInsightEvent = Procedure(Const Sender: IInsightItem) of Object;

Property OnInsight: TInsightEvent ...
Aber irgendwie sieht es etwas "unschön" aus, wenn ich jetzt eine Objekt-Methode in ein Interface reinmatsche.
Delphi-Quellcode:
IInsightEvent = Interface
  ['{13378CB0-A03F-4056-853B-5DDF693C36A9}']
  Procedure OnClick(Const Sender: IInsightItem);
End;

Property OnInsight: IInsightEvent ...
Allerdings finde ich dieses Interface-Event dann doch etwas "umständlich".

Hab 4 verschiedene Event-Typen und da ich niemanden Zwingen will, immer alle zu deklarieren, selbst wenn nur Eines verwendet wird, müßte ich ja alle 4 in je ein eigenes Interface verfrachten.

Und zusätzlich würde ich denjenigen Nutzer auch noch zwingen sein Verwaltungsobjekt (oder sonstwas) in ein Interface zu verwandeln.



Ja, was ist also nun besser/schöner/praktischer/einfacher/...?
$2B or not $2B
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.475 Beiträge
 
Delphi 12 Athens
 
#2

Re: Events für Interfaces ?

  Alt 28. Apr 2010, 14:42
Zitat von himitsu:
bei einem Objekt würde ich ein Event ja so Deklarieren
Delphi-Quellcode:
TInsightEvent = Procedure(Const Sender: IInsightItem) of Object;

Property OnInsight: TInsightEvent ...
Aber irgendwie sieht es etwas "unschön" aus, wenn ich jetzt eine Objekt-Methode in ein Interface reinmatsche.
Ich finde, das ist hier genau der richtige Weg. Das "of object" sagt ja nur etwas darüber aus, wo der Event implementiert wird und das ist letztendlich ja immer eine Klasse. Ob ich da jetzt eine Methode mit passender Signatur aber freiem Namen implementiere und diese dann dem Event zuweise, oder ein Interface implementiere und den Methodennamen mappe ist Geschmackssache. Es spricht nichts gegen den klassischen Event, auch wenn er über ein Interface gesetzt wird.

Es ist auch durchaus zulässig und sinnvoll, etwa solche Deklarationen in eine Interface-Deklaration zu packen:

procedure DoSomethingWith(AObject: TObject); Solange man sich nicht auf COM-Terrain begibt, besteht kein Hinderungsgrund Interfaces und Objekte zu mischen.
Uwe Raabe
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

Re: Events für Interfaces ?

  Alt 28. Apr 2010, 16:45
Nja, die Methoden-Namen kann man in der Objektimplementation ja umleiten und muß sich nicht mit den vorgegebenen Namen abfinden.


Aber OK, dann verwende ich weiterhin die Objekt-Methoden.
(war nur grad durch die OpenToolsAPI etwas in Verleitung geraten)
$2B or not $2B
  Mit Zitat antworten Zitat
ele

Registriert seit: 18. Feb 2009
129 Beiträge
 
Delphi 2010 Professional
 
#4

Re: Events für Interfaces ?

  Alt 28. Apr 2010, 16:56
Du kannst ja eine Basisklasse (z.B. abgeleitet von TInterfacedObject) erstellen, welche die Methoden implementiert. Wenn man dann will kann man in einer Ableitung die Methode überschreiben und wenn nicht wird einfach die leere Methode aus der Basisklasse ausgeführt.

Wenn man sein Objekt von einer anderen Basisklasse ableitet muss man sie dann halt trotzdem selber nochmal implementieren...

Aber da muss ich Uwe recht geben: Was spricht dagegen das TInsightEvent als procedure of object zu deklarieren? Das "of object" sagt ja eigentlich nur aus, dass es sich nicht um eine klassische Prozedur handelt, sondern um eine Methode.
  Mit Zitat antworten Zitat
Benutzerbild von sirius
sirius

Registriert seit: 3. Jan 2007
Ort: Dresden
3.443 Beiträge
 
Delphi 7 Enterprise
 
#5

Re: Events für Interfaces ?

  Alt 28. Apr 2010, 16:59
Du weist aber, dass man bei COM ein IDispatch-Interface als Event-Empfänger übergibt?
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  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 16:00 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