Segundo o help do Delphi, When defining a class that supports one or more interfaces, it is convenient to use TInterfacedObject as a base class because it implements the methods of IInterface. (tradução: Quando se define uma classe que suporta uma ou mais interfaces, é conveniente usar TInterfacedObject como classe, pois este implementa os métodos de IInterface)
Isso explica pq vc teve os erros apresentados, pq vc apenas fez menção à interface ITransportePedido na declaração de sua classe derivada de TCollectionItem, mas não fez a declaração e a implementação dos métodos citados nas mensagens de erro. Lembrando que o Delphi não possui herança múltipla, você não pode ter uma declaração como a seguinte: type TTransportePedido = class(TCollectionItem, TTransportePedido) Como TTransportePedido é na verdade do descendente de TInterfacedObject, este implementa os métodos de IInterface, mas não pode ser usado como um item para ser adicionado a uma coleção, por não ser descendente de TCollectionItem. A alternativa que vejo seria vc usar TList ao invés de TCollection, pois com TList vc pode adicionar objetos, sejam eles o que forem, enquanto que TCollection só admite descendentes de TCollectionItem. Sds. De: delphi-br@yahoogrupos.com.br [mailto:delphi...@yahoogrupos.com.br] Em nome de Jose Henrique Enviada em: quarta-feira, 13 de maio de 2009 09:07 Para: delphi-br@yahoogrupos.com.br Assunto: [delphi-br] TCollection e Interfaces Senhores bom dia, tenho uma interface criada no meu sistema (ITransportePedido) e quando fui utilizá-la numa classe descendente de (TInterfacedObject) tudo bem ! Porém ao criar outra classe que é descendente de (TCollectionItem) o compilador acusa erro dizendo que métodos não foram implementados. Erro: [Pascal Error] Pedidos.pas(48): E2003 Undeclared identifier: 'QueryInterface' [Pascal Error] Pedidos.pas(48): E2003 Undeclared identifier: '_AddRef' [Pascal Error] Pedidos.pas(48): E2003 Undeclared identifier: '_Release' A declaração das classes seria a que está abaixo, notem o comentário para evitar o erro. Nessa classe está tudo OK!! TTransportePedido = class(TInterfacedObject, ITransportePedido) Nessa outra ocorre o erro acima!! TPedido = class(TCollectionItem) //, ITransportePedido) Será que para poder utilizar a interface somente posso se implementar os métodos acima (que estão no erro). Ou melhor eu teria que implementar também a interface (IInterface) TPedido = class(TCollectionItem, IInterface, ITransportePedido) Essa seria a maneira correta ?? [As partes desta mensagem que não continham texto foram removidas]