Dúvidas ao instanciar objetos
Olá, gostaria de saber qual a diferença entre as seguintes formas de acesso a um método/atributo de uma classe:
1º
teste := TTeste.Create(self);
teste.MostraMsg;
2º
TTeste.Create(self).MostraMsg;
3º
TTeste(self).MostraMsg;
1º
teste := TTeste.Create(self);
teste.MostraMsg;
2º
TTeste.Create(self).MostraMsg;
3º
TTeste(self).MostraMsg;
Devjunior
Curtidas 0
Respostas
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:
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.
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
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?
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
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
20/02/2014
Muito obrigado.
GOSTEI 0
Marco Salles
20/02/2014
Disponha amigo
[]sds
[]sds
GOSTEI 0