GARANTIR DESCONTO

Fórum Dúvidas ao instanciar objetos #470648

20/02/2014

0

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

Responder

Posts

21/02/2014

Joel Rodrigues

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

Gostei + 0

21/02/2014

Rad Informatica

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

Gostei + 0

22/02/2014

Marco Salles

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
Responder

Gostei + 0

24/02/2014

Devjunior

Muito obrigado.
Responder

Gostei + 0

24/02/2014

Marco Salles

Disponha amigo

[]sds
Responder

Gostei + 0

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

Aceitar