Das Gegenstück zu
instanceof ist nun mal
is
und macht genau das was du beschreibst.
Vielleicht hast du ganz falsche Erwartungen davon, was da passiert?
Eben nicht, denn "instanceof" prüft ob das referenzierte Objekt zuweisungskompatibel zu einer Klasse ist. "is" hingegen prüft lediglich, ob die Referenz/Pointer zuweisungskompatibel ist (wie man in meinem Beispiel schön sieht). "TObject.InheritsFrom" macht genau das was ich brauche.
Dann guck dir mal die Implementierung von
is
in FPC an:
Delphi-Quellcode:
function fpc_do_is(aclass : tclass;aobject : tobject) : boolean;[public,alias: 'FPC_DO_IS']; compilerproc;
begin
fpc_do_is:=assigned(aobject) and assigned(aclass) and
aobject.inheritsfrom(aclass);
end;
Ich hab mal dein Beispiel von Anfang (ein bisschen abgeändert) getestet:
Ich habe dein abgeändertes Beispiel ausgeführt. Die Ausgabe ist jedoch anders, als du schreibst:
Eventuell kann es sein, dass der Compiler
intfobjvar is TInterfacedObject
vereinfacht zu
Assigned(intfobjvar)
, weil er davon ausgeht, dass in einer Variable vom Typ
TInterfacedObject
nur eine Instanz vom Typ
TInterfacedObject
oder eines seiner Nachfahren sein kann...
Kannst du dir mal bitte noch das Ergebnis von
obj is TInterfacedObject
ausgeben lassen? Da sollte dann, falls meine Vermutung zutrifft,
False
bei rauskommen.
Gruß,
Sven