Verstehe ich richtig, dass Du prüfen willst, ob Dein Objekt nicht nur IInterfB sondern auch IInterfA unterstützt?
Dann ginge das vielleicht so:
Delphi-Quellcode:
TImplB = class(TInterfacedObject, IInterfB, IInterfA)
...
var
lA: IInterfA;
if Supports(lB, IInterfB, lA) then
DoSomething(lA);
Das geht mit jedem Interface, unabhängig davon, ob es sich um Ableitungen handelt oder nicht.
Die Signatur von
MInterfA = function(): IInterfA of object;
unterscheidet sich von
function factoryB(): IInterfB;
ja nur durch einen "Downcast". Meiner Meinung eine gültige Zuweisung, bzw. ein legitimes Design.
Der Compiler lässt mich keine direkte Zuweisung machen:
Self.getInterfA := self.factoryB;
Dafür könnte es ja Gründe geben, die ich nicht verstehe/kenne, aber gerne wissen würde. Daher meine Fragen nach der einfachsten Art der Zuweisung und ob es Argumente gibt, dies nicht zu tun, bzw was dabei zu beachten ist.