Ein Fehler meinerseits!
Vergiss den is-Operator.
Deine Variante mit den QueryInterface ist ok.
Das biete ich an:
Delphi-Quellcode:
var aClass: TBaseClass;
aInt : ITest2;
begin
// aClass := TBaseClass.Create;
aClass := TTestClass.Create;
// 1. Variante
if aClass.GetInterface(ITest2, aInt) then
aInt.Test2
else
ShowMessage('ITest2 nicht existent!');
// 2. Variante
try
(aClass as ITest1).Test1;
except
on E:EIntfCastError do
ShowMessage('ITest1 nicht existent!');
end;
try
(aClass as ITest2).Test2;
except
on E:EIntfCastError do
ShowMessage('ITest2 nicht existent!');
end;
end;
Ich verwende beide, je nachdem.