Dúvidas ao instanciar objetos

Delphi

20/02/2014

Olá, gostaria de saber qual a diferença entre as seguintes formas de acesso a um método/atributo de uma classe:


teste := TTeste.Create(self);
teste.MostraMsg;


TTeste.Create(self).MostraMsg;


TTeste(self).MostraMsg;
Devjunior

Devjunior

Curtidas 0

Respostas

Joel Rodrigues

Joel Rodrigues

20/02/2014

Olá, DevJunior.

Quando você cria uma variável e atribui a ela uma instância de uma classe (objeto), você poderá utilizá-la em vários pontos do código, acessando-a pelo seu nome (como "teste", no seu exemplo).
Ou seja, a partir do momento em que o objeto foi instanciado, você pode acessar seus campos e métodos diretamente:
teste.FacaIsso();
teste.FacaAquilo();
teste.Nome := 'Objeto de teste';


Já quando você acessa um método/campo a partir do próprio construtor da classe, você só poderá fazer uma única chamada/acesso àquele objeto. Se você repetir o procedimento para acessar outro campo/método, estará criando uma nova instância do objeto.

Essa segunda forma é útil quando você só vai realmente precisar de um acesso às propriedades daquele objeto, não sendo necessário acessá-lo posteriormente.
GOSTEI 0
Rad Informatica

Rad Informatica

20/02/2014

Muito obrigado.
Estou iniciando em POO, criação de classes e etc, e estão aparecendo algumas dúvidas ao analisar componentes e exemplos em meus estudos, então tenho mais uma pergunta.
Na segunda forma, quando informo 'Self' ao criar, não tem problema, pois ele será destruído junto com quem chamou.
Na terceira forma, ao debugar, notei que o construtor não é executado, e mesmo passando 'nil' ao criar, ao sair o objeto já está desalocado (utilizei o ReportMemoryLeaksOnShutdown := True para verificar). Isto significa que a terceira forma é melhor para fazer esses acessos rápidos ou isso tem algum custo para a aplicação?
GOSTEI 0
Marco Salles

Marco Salles

20/02/2014

Na segunda forma, quando informo 'Self' ao criar, não tem problema, pois ele será destruído junto com quem chamou.


Mas se vc deixar por conta do Proprietário , a memória do sistema pode ir aumentando ... O Seu uso tem que ser pensado


de uma lida em

http://www.activedelphi.com.br/forum/viewtopic.php?t=50111&highlight=self+nil+application&sid=8262c9ed293c9bd1fdbc3a76bbfcc68b


Na terceira forma, ao debugar, notei que o construtor não é executado, e mesmo passando 'nil' ao criar, ao sair o objeto já está desalocado (utilizei o ReportMemoryLeaksOnShutdown := True para verificar). Isto significa que a terceira forma é melhor para fazer esses acessos rápidos ou isso tem algum custo para a aplicação?


No terceiro Método , o mensagem é um MÈDODO de Classe , aplicado a classe e não a Instacia da classe ... Pesquise sobre Métodos de Classe
GOSTEI 0
Devjunior

Devjunior

20/02/2014

Muito obrigado.
GOSTEI 0
Marco Salles

Marco Salles

20/02/2014

Disponha amigo

[]sds
GOSTEI 0
POSTAR