Assume you have the following:
//Note the original example I posted didn't reproduce the problem so
//I created an clean example
type
IParent = interface(IInterface)
['{85A340FA-D5E5-4F37-ABDD-A75A7B3B494C}']
procedure DoSomething;
end;
IChild = interface(IParent)
['{15927C56-8CDA-4122-8ECB-920948027015}']
procedure DoSomethingElse;
end;
TGrandParent = class(TInterfacedObject)
end;
TParent = class(TGrandParent)
end;
TChild = class(TParent, IChild)
private
FChildDelegate: IChild;
public
property ChildDelegate:IChild read FChildDelegate implements IChild;
end;
TChildDelegate = class(TInterfacedObject, IChild)
public
procedure DoSomething;
procedure DoSomethingElse;
end;
I would think that this would allow you to call DoSomething
but this doesn't seem to be the case:
procedure CallDoSomething(Parent: TParent);
begin
if Parent is TChild then
TChild(Parent).DoSomething;
end;
Its clear that the compiler is enforcing the interface inheritance because neither class will compile unless the members of IParent
are implemented. Despite this the compiler is unable to resolve members of the IParent
when the class is instantiated and used.
I can work around this by explicitly including IParent
in the class declaration of
TMyClass
:
TMyClass = class(TInterfacedObject, IChild, IParent)
Nevermind, this doesn't work around anything.
Object
. – Loving