I am trying to declare a custom list of interfaces from which I want to inherit in order to get list of specific interfaces (I am aware of IInterfaceList, this is just an example). I'm using Delphi 2007 so I don't have access to actual generics (pity me).
Here is a simplified example:
ICustomInterfaceList = interface
procedure Add(AInterface: IInterface);
function GetFirst: IInterface;
end;
TCustomInterfaceList = class(TInterfacedObject, ICustomInterfaceList)
public
procedure Add(AInterface: IInterface);
function GetFirst: IInterface;
end;
ISpecificInterface = interface(IInterface)
end;
ISpecificInterfaceList = interface(ICustomInterfaceList)
function GetFirst: ISpecificInterface;
end;
TSpecificInterfaceList = class(TCustomInterfaceList, ISpecificInterfaceList)
public
function GetFirst: ISpecificInterface;
end;
TSpecificInterfaceList will not compile:
E2211 Declaration of 'GetFirst' differs from declaration in interface 'ISpecificInterfaceList'
I guess I could theoretically use TCustomInterfaceList but I don't want to have to cast "GetFirst" every time I use it. My goal is to have a specific class that both inherits the behavior of the base class and wraps "GetFirst".
How can I achieve this?
Thanks!
ISpecificInterfaceList
defines three methods. They are:
procedure Add(AInterface: IInterface);
function GetFirst: IInterface;
function GetFirst: ISpecificInterface;
Because two of your functions share the same name, you need to help the compiler identify which one is which.
Use a method resolution clause.
TSpecificInterfaceList = class(TCustomInterfaceList, ISpecificInterfaceList)
public
function GetFirstSpecific: ISpecificInterface;
function ISpecificInterfaceList.GetFirst = GetFirstSpecific;
end;
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With