Dúvida na implementação do Construtor da classe
Olá, tenho uma classe que no Construtor eu atribuo o valor a algumas propertys. Para leitura eu utilizo o campo, mas na escrita utilizo uma função set.
Ex.:
property Codigo:string read FCodigo write SetCodigo;
property Nome:string read FNome write SetNome;
-------------------------
constructor Create(VCodigo, VNome:string);
-------------------------
constructor TTeste.Create(VCodigo, VNome:string);
begin
FCodigo := VCodigo;
FNome := VNome;
end;
Reparei que ao atribuir o valor às variáveis no create, as funções set não são executadas. Procurei na internet algo sobre isso mas não encontrei. Minha dúvida é se realmente não é executado no create ou se é algo que estou fazendo errado.
Ex.:
property Codigo:string read FCodigo write SetCodigo;
property Nome:string read FNome write SetNome;
-------------------------
constructor Create(VCodigo, VNome:string);
-------------------------
constructor TTeste.Create(VCodigo, VNome:string);
begin
FCodigo := VCodigo;
FNome := VNome;
end;
Reparei que ao atribuir o valor às variáveis no create, as funções set não são executadas. Procurei na internet algo sobre isso mas não encontrei. Minha dúvida é se realmente não é executado no create ou se é algo que estou fazendo errado.
Devjunior
Curtidas 0
Respostas
Johni Marangon
07/10/2013
Caro DevJunior, os métodos vinculados ao "read' e "write" de uma propriedade somente são invocados (chamados) quando a própria propriedade estiver sendo manipulada.
No seu casos ao invés de atribuir o valor do vCodigo ao FCodigo atribua o vCodigo ao Codigo, que é a propriedade isso ira fazer com que o método SetCodigo seja invocado.
Observe o seguinte: o método vinculado ao "read" é chamado quando você lê o valor de uma propriedade Ex: CodigoDoproduto:= Teste.Codigo e o método vinculado ao "write" quando você atribui um valor a propriedade. Ex: Codigo:= 1254,
No código que você colocou como exemplo no Create, altere o FCodigo para Codigo e FNome para Nome, dessa forma o método SetCodigo e SetNome serão chamados.
Espero ter ajudado.
Mas lembre-se não é uma boa pratica fazer esse tipo de implementação no evento Create, haja visto que o FCodigo e FNome são utilizados para manipulação dos dados dentro da classe.
Abraço
No seu casos ao invés de atribuir o valor do vCodigo ao FCodigo atribua o vCodigo ao Codigo, que é a propriedade isso ira fazer com que o método SetCodigo seja invocado.
Observe o seguinte: o método vinculado ao "read" é chamado quando você lê o valor de uma propriedade Ex: CodigoDoproduto:= Teste.Codigo e o método vinculado ao "write" quando você atribui um valor a propriedade. Ex: Codigo:= 1254,
No código que você colocou como exemplo no Create, altere o FCodigo para Codigo e FNome para Nome, dessa forma o método SetCodigo e SetNome serão chamados.
Espero ter ajudado.
Mas lembre-se não é uma boa pratica fazer esse tipo de implementação no evento Create, haja visto que o FCodigo e FNome são utilizados para manipulação dos dados dentro da classe.
Abraço
GOSTEI 0
Devjunior
07/10/2013
Realmente não me atentei para isto. Muito obrigado pelas dicas, estou iniciando os estudos em Delphi OO e estou desenvolvendo alguns aplicativos de teste.
GOSTEI 0