Wenn man mit Interface Variablen arbeitet verbergen sich dahinter auch immer nur normale Klassen allerdings darf man sie solange man sie als interface anspricht nur mit den Interface Methoden arbeiten alla:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16:
| type myinterface = interface(IUnknown) function getref:class of TObject; end;
type myclass1 = class(TObject,Myinterface)
end;
implementation
function TMyclass1.getref:class of TObject; begin result:=self.classtype; end; |
Wie man hier sieht ist das etwas trickey, da interfaces nur Methoden definieren und keine Variablen selbst haben deshalb die Klassenreferenz selbst mitschleppen. Die könntest du jetzt direkt vergleichen so alla:
Delphi-Quelltext
1: 2: 3: 4: 5:
| klassentyp:=myinterfacevar.getref; case klassentp of myclass1:...; myclass2:...; end; |
Was aber ebenfalls geht ist, da sich hinter jedem Interface ein Object verbirgt es einfach als Object ansprechen das heißt auf TObject casten und dann classtype benutzen alla:
Delphi-Quelltext
1: 2: 3: 4:
| if TObject(myinterfacevar) is myclass1 then begin end; |
//Edit:
Wenn du sowieso schon weißt, dass deine Klasse dieses Interface unterstützt dann sollte es ja auch reichen zu überprüfen welche Klasse es ist mit dem is-Operator. So heißt es auch in einer Zeile bei dir. Falls es da partout keinen Befehl gibt kann man da auch einen Workaround machen, da diese Information meistens bei Compilierzeit feststehen sollte kannst du einfach eine Liste mit Klassen machen welche dies und das unterstützen und mit der vergleichen.
Was auch möglich wäre alle Objekte ein Interface Iinterfacechecklist implementieren zu lassen die immer ja nein zurückgeben wenn sie es unterstützen.