Can i typecast a base interface to derived interface.
How do I make like Delphi
Delphi generated code / Delphi 7 :
function TXMLBook.Get_Id: IXMLId;
begin
Result := ChildNodes['id'] as IXMLId;
end;
ChildNodes[‘id’] is base type IXMLNode
IXMLId is derived type from IXMLNode
and my sample code is :
type
IBase = interface(IInterface)
['{5CEA3668-36CB-444C-8D3E-06644070A2B4}']
function Test:AnsiString;
end;
TBase =class(TInterfacedObject,IBase)
function Test:AnsiString;
end;
IDerived =interface (IBase)
['{8CDB2982-43B0-4636-B6F5-2561C0D419A9}']
function Test2: AnsiString;
end;
TDerived=class (TBase,IDerived)
function Test:AnsiString;
function Test2:AnsiString;
end;
{ TBase }
function TBase.Test: AnsiString;
begin
Result:='Base Test';
end;
{ TDerived }
function TDerived.Test: AnsiString;
begin
Result:='Derived Test';
end;
function TDerived.Test2: AnsiString;
begin
Result:='Derived Test2';
end;
procedure TForm1.Button1Click(Sender: TObject);
var
b:IBase;
d: IDerived;
begin
b:=TBase.Create;
d:=b as IDerived; // Error : Interface not supported
ShowMessage(b.Test);
end;
Your
TBaseclass currently does not implementIDerived, it only implementsIBase.Your
TDerivedclass implements bothIBase(by inheriting fromTBase) andIDerived(explicitly).You should either
Change your
TBasedeclaration toTBase =class(TInterfacedObject,IBase, IDerived)and implement the
IDerivedmethods inTBase.b:=TBase.Create;tob:=TDerived.Create;