object list
alguém poderia me ajudar com object list?
tenho o seguinte objeto:
quero criar um objeto do tipo TobjectList para criar uma lista desses meus objetos, mas estou em dúvida de como implementar o método add(): integer;
encontrei o seguinte exemplo:
porem gostaria de saber se do jeito abaixo está mais correto:
e se eu quiser setar as propriedades do meu objeto TAssociaCampo no momento de adicionar ele na lista, como eu faria?
Obrigado pela força!
tenho o seguinte objeto:
TAssociaCampo = class(Tobject) public campoOri: string; CampoDes: string; constructor create(acampoOri, AcampoDes: string); overload; dynamic; constructor create; overload; dynamic; end;
quero criar um objeto do tipo TobjectList para criar uma lista desses meus objetos, mas estou em dúvida de como implementar o método add(): integer;
encontrei o seguinte exemplo:
function TAssociaCampoList.Add(avalor: TAssociaCampo): Integer; var NovoObj : TAssociaCampo; begin NovoObj := TAssociaCampo.Create(nil); NovoObj.Assign(AValor); Result := inherited Add(NovoObj); end;
porem gostaria de saber se do jeito abaixo está mais correto:
function TAssociaCampoList.Add(avalor: TAssociaCampo): Integer; begin Result := inherited Add(avalor); end;
e se eu quiser setar as propriedades do meu objeto TAssociaCampo no momento de adicionar ele na lista, como eu faria?
Obrigado pela força!
Vitor Rubio
Curtidas 0
Respostas
Massuda
05/12/2005
No primeiro caso você estará incluindo na lista uma cópia do objeto enquanto no outro caso você estará incluindo o próprio objeto na lista; qual dos dois está ´correto´ depende de como você está usando essa lista. Eu uso a segunda forma quando preciso ter uma lista centralizada de objetos; não uso a primeira forma, geralmente eu incluo uma função para clonar o objeto na própria classe do objeto.
GOSTEI 0
Vitor Rubio
05/12/2005
no meu caso eu vou fazer assim:
cada objeto do tipo TassociaCampo eu vou criar durante um loop e adicionar
esses objetos na lista TassociaCampoList, que foi criada logo antes do loop.
Depois eu passo esse objeto TassociaCampoList como parâmetro de uma procedure que vai percorrer todos os itens e fazer o que tem que fazer com cada um dos objetos. Eu não preciso mais dos objetos isolados, apenas das listas.
O importante é que quando eu der free no TassociaCampoList, todos os objetos da lista deverão ser destruidos, e acho que para isso não seria certo clonar os objetos. A segunda maneira é a melhor no meu caso então?
cada objeto do tipo TassociaCampo eu vou criar durante um loop e adicionar
esses objetos na lista TassociaCampoList, que foi criada logo antes do loop.
Depois eu passo esse objeto TassociaCampoList como parâmetro de uma procedure que vai percorrer todos os itens e fazer o que tem que fazer com cada um dos objetos. Eu não preciso mais dos objetos isolados, apenas das listas.
O importante é que quando eu der free no TassociaCampoList, todos os objetos da lista deverão ser destruidos, e acho que para isso não seria certo clonar os objetos. A segunda maneira é a melhor no meu caso então?
GOSTEI 0
Massuda
05/12/2005
Pelo que entendi, no seu caso o melhor é usar a segunda forma que você mostrou. Apenas não dê Free nos objetos que você cria e adiciona na lista, pois isso ficará por conta da lista.
GOSTEI 0
Vitor Rubio
05/12/2005
agora, pra implementar o método clear eu tenho que percorrer todos os itens dando free nos objetos e para implementar o método free, eu dou um clear antes do inherited?
GOSTEI 0
Massuda
05/12/2005
O TObjectList cuida disso.
Quando crio uma lista derivada de TObjectList para ser uma lista de (por exemplo) TMeuObjeto, eu geralmente faço......mas tudo isso só é necessário porque eu não quero ter que fazer typecast de TMeuObjeto para TObject (e vice-versa) quando estiver usando essa lista.
Quando crio uma lista derivada de TObjectList para ser uma lista de (por exemplo) TMeuObjeto, eu geralmente faço...
type TListaDeMeuObjeto = class(TObjectList) private function GetItem(const Index: Integer): TMeuObjeto; procedure SetItem(const Index: Integer; MeuObjeto: TMeuObjeto); public function Add(MeuObjeto: TMeuObjeto): Integer; function IndexOf(MeuObjeto: TMeuObjeto): Integer; function Remove(MeuObjeto: TMeuObjeto): Integer; procedure Insert(Index: Integer; MeuObjeto: TMeuObjeto); property Items[const Index: Integer]: TMeuObjeto read GetItem write SetItem; default; end;
GOSTEI 0
Vitor Rubio
05/12/2005
Ahn, blz. Olhei o ancestrais e o Tlist tem os métodos clear e free. (se bem que eu não entendi lhufas de como eles funcionam).
Acho que agora vai ^^
Valeu Massuda!
Acho que agora vai ^^
Valeu Massuda!
GOSTEI 0