我刚刚学习Spring4D,我有一个问题。 如果类实现一个接口它都清楚:如何在Spring4D中使用多接口类如何在Spring4D中使用多接口类
IWeapon = interface
['{E679EDA6-5D43-44AD-8F96-3B5BD43A147B}']
procedure Attack;
end;
TSword = class(TInterfacedObject, IWeapon)
public
procedure Attack;
end;
GlobalContainer.RegisterType<TSword>.Implements<IWeapon>('sword');
sword := ServiceLocator.GetService<IWeapon>('sword');
和IM真的很高兴现在,我有剑,我不需要释放它。
但如果类实现两个或多个接口:
IWeapon = interface
['{E679EDA6-5D43-44AD-8F96-3B5BD43A147B}']
procedure Attack;
end;
IShield = interface
['{B2B2F443-85FE-489C-BAF4-538BB5B377B3}']
function Block: Integer;
end;
TSpikedShield = class(TInterfacedObject, IWeapon, IShield)
public
function Block: Integer;
procedure Attack;
end;
GlobalContainer.RegisterType<TSpikedShield>.Implements<IWeapon>.Implements<IShield>;
我可以向服务定位为TSpikedShield的实例,但我需要选择一个IWeapon或IShield。但我想以两种方式使用它(或者我不应该想?),如:
spikedShield.Attack;
spikedShield.Block;
所以,如果我已了解好,我直接创建TSpikedShiled的实例(我的意思是不带网络接口)。
function MakeSpikedShield: TSpickedShield;
begin
result := TSpickedShield.Create;
end;
有什么方法可以使用这个类,但与automagical自由?
(不会有问题,如果接口可以实现多interfeces但其在德尔福不允许)
编辑: 也许somethink这样呢?
ISpikedSield = interface
function AsWeapon: IWeapon;
function AsShield: IShield;
end;
TSpikedShield = class(TInterfacedObject, ISpikedShield)