Funcionou como uma luva, valeu mesmo, a única coisa que tive que mudar foi o
tipo de TypeCast como segue abaixo

 

Antes:

 

for I := 0 to Pred(FList.Count) do
(FList as IIntfA).Execute;

 

Depois:

 

for I := 0 to Pred(FList.Count) do IIntfA (FList[I]).Execute;

 

Muito Obrigado,

 

Anderson

 

  _____  

De: delphi-br@yahoogrupos.com.br [mailto:[EMAIL PROTECTED] Em
nome de Joao Morais
Enviada em: quarta-feira, 27 de dezembro de 2006 11:22
Para: delphi-br@yahoogrupos.com.br
Assunto: Re: [delphi-br] Help em Interfaces ...

 

anderson wrote:

> E ai galera, seguinte. Estou querendo implementar algumas features no meu
> sistema e estou precisando manipular uma coleção de objetos com um TList
por
> exemplo e em determinados momentos percorrer esta lista executando métodos
> destes objetos pelas interfaces que implementam. Por exemplo. Supondo que
eu
> tenha a Interface A, e um monte de objetos que implementam esta interface
> que tem o método DoSomething. Em algum momento do meu código eu gostaria
de
> correr esta lista de Objetos (que pode ser de qualuqer tipo, desde que
> implemente a Interface A) e executar seu método DoSomething sem nem me
> importar de que tipo é o objeto, chamando o método somente pela interface
> que implementa. Alguém tem um código similiar ou dica de como fazer ???

Você pode fazer um wrapper para um TInterfaceList, colocar métodos 
Add(ISuaInterface) em seu wrapper, dentro dele fazer um cast dos itens 
para ISuaInterface, e então chamar o método.

Não sou fã de interface e não conheço bem sua sintaxe, talvez você 
precise fazer um cast ou modificá-lo em um canto ou outro, mas a 
estrutura fica mais ou menos assim:

TIntfAWrapper = class()
private
FList: IInterfaceList;
public
constructor Create;
function Add(AItem: IIntfA): Integer;
procedure Execute;
end;

function TIntfAWrapper.Add(AItem: IIntfA): Integer;
begin
FList.Add(AItem);
end;

constructor TIntfAWrapper.Create;
begin
inherited;
FList := TInterfaceList.Create;
end;

procedure TIntfAWrapper.Execute;
var
I: Integer;
begin
for I := 0 to Pred(FList.Count) do
(FList as IIntfA).Execute;
end;

--
João Morais

 



[As partes desta mensagem que não continham texto foram removidas]

Responder a