I have these interface declarations:
IListener = interface procedure HandleEvent(AEvent: TMyEvent); end; IExtendedListener = interface(IListener) ['{85A3456A-D5E5-4F37-ABDD-A75A7B3B494C}'] // required by GetInterface procedure HandleExtendedEvent(AExtendedEvent: TMyExtendedEvent); end;
Given an interface reference for something that implements IListener , how can I check if it implements IExtendedListener as IExtendedListener ? I use the code below the code because it is a compile-time error to do something like if Listener is IExtendedListener then ...
TSomeClass.Notify(AEvent: TMyExtendedEvent); var Listener: IListener; ExtListener: IExtendedListener; Obj: TObject; begin for Listener in FListeners do begin // works but smells funny Obj := Listener as TObject; Obj.GetInterface(IExtendedListener, ExtListener); if Assigned(ExtListener) then ExtNotifyee.HandleExtendedEvent(AEvent); end; end;
Lawrence barsanti
source share