Du kannst lediglich mit
support checken, ob eine Instanz ein Interface implementiert. Damit
support funktioniert, musst du bei der Interface-Deklaration eine weltweit eindeutige GUID angeben (Ctrl+Shift+G).
Ausserdem fällt mir auf, dass dein Code so nicht viel Sinn ergibt. Statt
IMyInterface = class(IInterface) war wohl eher
IMyInterface = interface gemeint. Vielleicht hilft dir folgendes Beispiel auf die Sprünge:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30:
| type IMyInterface = interface ['{0B4E2DA5-EFC8-49ED-8928-9ADD1E7D030D}'] end;
TMyObject = class(TInterfacedObject,IMyInterface) destructor Destroy; override; end;
destructor TMyObject.Destroy; begin ShowMessage('Destroyed'); end;
procedure TForm1.FormCreate(Sender: TObject); var MyInterface: IMyInterface; MyObject: TMyObject; begin MyObject := TMyObject.Create; MyInterface := MyObject;
if MyObject is TMyObject then ShowMessage('MyObject is TMyObject');
if Supports(MyInterface, IMyInterface) then ShowMessage('MyInterface supports IMyInterface');
end; |
Um rauszukriegen, ob MyInterface von TMyObject stammt könntest du die Funktion ClassType bei der Interface-Deklaration angeben (
function ClassType: TClass;). Danach könntest du mit
if MyInterface.ClassType = TMyObject die gewünschte Überprüfung vornehmen (ist aber nicht dasselbe wie "is", man testet hier auf Gleichheit). Ich bezweifle aber, dass sowas nötig ist, um das zu erreichen, was du erreichen willst. Ich habe noch nie einen Code gesehen, wo man ein Interface auf eine Klasse testet... Das ist IMHO keine saubere OOP.