Fórum Dúvida na implementação do Construtor da classe #457691

07/10/2013

0

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.
Devjunior

Devjunior

Responder

Posts

07/10/2013

Johni Marangon

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
























Responder

Gostei + 0

07/10/2013

Devjunior

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.
Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar