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]

Responder a