私はSpring4Dを学んでいるだけで、1つの質問があります。 一つだけがそのすべてが明確インタフェースクラスを実装する場合:今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');
とイム本当に幸せ、私は剣を持っていると私はそれを解放する必要がいけません。
が、クラスを2つの以上のインタフェース実装している場合:
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のインスタンスのためのServiceLocatorを求めることができますが、私は1 IWeaponまたはISHIELDを選ぶ必要があります。しかし、私は、2つの方法でそれを使用する(または私は望んでいないでしょうか?)のようにしたい:
spikedShield.Attack;
spikedShield.Block;
だから私は良いundestand場合、私は(私はインターフェイスなしを意味する)を直接TSpikedShiledのインスタンスを作成する必要があります。
function MakeSpikedShield: TSpickedShield;
begin
result := TSpickedShield.Create;
end;
このクラスを使用する方法はありますが、オートマティックフリーですか?
(そこインタフェースは、マルチinterfecesを実装することができれば問題にならないが、そのデルファイでは許可されません)
編集: は多分そのようsomethink?
ISpikedSield = interface
function AsWeapon: IWeapon;
function AsShield: IShield;
end;
TSpikedShield = class(TInterfacedObject, ISpikedShield)