none
Utilidade do "this" RRS feed

  • Pergunta

  • Boa tarde, trabalho com C# há uns 6 meses apenas e sempre tive curiosidade sobre a "serventia" ou "utilidade" do "this.Metodo();". Sei que posso chamar um método, por exemplo, com ou sem o "this", mas gostaria de saber se existem e ,se sim, quais as vantagens de utiliza-lo.

    Obrigado.


    ------------------------------------------------------------ Salatiel C. Bairros Graduando em Engenharia de Computação - UNIPAMPA Desenvolvedor Web estagiário na empresa Impulso Web Soluções Digitais. Telefones: (53) 9952-8178 e (53) 3247-2630 ------------------------------------------------------------

    quarta-feira, 12 de junho de 2013 17:40

Respostas

  • Resposta curta - Não tem diferença nenhuma (na maioria dos casos).

    Resposta longa - Imagine a seguinte situação:

    class Class1
    {
    	
       public delegate void MetodoSemParametros();
    	
    	public void Executar(MetodoSemParametros FazerAlgumaCoisa)
    	{
    		//invoca o delegate FazerAlgumaCoisa passado como parâmetro, 
    		//pois é o identificador mais imediato
    		FazerAlgumaCoisa();      
    
    		//invoca o método FazerAlgumaCoisa() da Class1		
    		this.FazerAlgumaCoisa();   
    
    		//invoca o método FazerOutraCoisa() da Class1 pois não existe 
    		//conflito de nomes
    		FazerOutraCoisa();         
    		
    		//invoca o método FazerOutraCoisa() da Class1
    		this.FazerOutraCoisa();    
    	}
    
    	private void FazerAlgumaCoisa()
    	{
    	}
    
    	private void FazerOutraCoisa()
    	{         
    	}
    }
    	

    É bem provável que você não encontre um parâmetro que seja um delegate, que tenha a mesma assinatura e exatamente o mesmo nome que um outro método da sua classe. Mas a linguagem permite. Nesse caso o this está aqui para salvar o dia.

    • Marcado como Resposta Salatiel Bairros quarta-feira, 12 de junho de 2013 19:06
    quarta-feira, 12 de junho de 2013 18:32
  • Olá Salatiel Bairros,

    Você usa "this" para acessar recursos do seu escopo atual, evitando conflito com outros recursos que usam do mesmo nome, exemplo:

    public class Operacoes
    {
        int valor = 5;
    
        public string TratarValor(int valor)
        {
            return (this.valor + valor).ToString();
        }
    }

    Se eu não tivesse colocado "this" para chamar a minha variável "valor" no escopo da classe operações, eu estaria somando o valor que ele passou com o mesmo valor, sendo que na verdade eu queria somar o valor que ele digitou mais 5.

    Vitor Mendes | http://www.vitormendes.com.br/

    "Ajuda teu semelhante a levantar a sua carga, porém, não a carregá-la." (Pitágoras)

    • Marcado como Resposta Salatiel Bairros quarta-feira, 12 de junho de 2013 19:06
    quarta-feira, 12 de junho de 2013 19:02

Todas as Respostas

  • Entendi, mas esse link não responde uma das minhas duvidas sobre o "this", que seria Qual é a diferença entre "this.Metodo();" e apenas "Metodo()". 

    ------------------------------------------------------------ Salatiel C. Bairros Graduando em Engenharia de Computação - UNIPAMPA Desenvolvedor Web estagiário na empresa Impulso Web Soluções Digitais. Telefones: (53) 9952-8178 e (53) 3247-2630 ------------------------------------------------------------

    quarta-feira, 12 de junho de 2013 17:55
  • Resposta curta - Não tem diferença nenhuma (na maioria dos casos).

    Resposta longa - Imagine a seguinte situação:

    class Class1
    {
    	
       public delegate void MetodoSemParametros();
    	
    	public void Executar(MetodoSemParametros FazerAlgumaCoisa)
    	{
    		//invoca o delegate FazerAlgumaCoisa passado como parâmetro, 
    		//pois é o identificador mais imediato
    		FazerAlgumaCoisa();      
    
    		//invoca o método FazerAlgumaCoisa() da Class1		
    		this.FazerAlgumaCoisa();   
    
    		//invoca o método FazerOutraCoisa() da Class1 pois não existe 
    		//conflito de nomes
    		FazerOutraCoisa();         
    		
    		//invoca o método FazerOutraCoisa() da Class1
    		this.FazerOutraCoisa();    
    	}
    
    	private void FazerAlgumaCoisa()
    	{
    	}
    
    	private void FazerOutraCoisa()
    	{         
    	}
    }
    	

    É bem provável que você não encontre um parâmetro que seja um delegate, que tenha a mesma assinatura e exatamente o mesmo nome que um outro método da sua classe. Mas a linguagem permite. Nesse caso o this está aqui para salvar o dia.

    • Marcado como Resposta Salatiel Bairros quarta-feira, 12 de junho de 2013 19:06
    quarta-feira, 12 de junho de 2013 18:32
  • Olá Salatiel Bairros,

    Você usa "this" para acessar recursos do seu escopo atual, evitando conflito com outros recursos que usam do mesmo nome, exemplo:

    public class Operacoes
    {
        int valor = 5;
    
        public string TratarValor(int valor)
        {
            return (this.valor + valor).ToString();
        }
    }

    Se eu não tivesse colocado "this" para chamar a minha variável "valor" no escopo da classe operações, eu estaria somando o valor que ele passou com o mesmo valor, sendo que na verdade eu queria somar o valor que ele digitou mais 5.

    Vitor Mendes | http://www.vitormendes.com.br/

    "Ajuda teu semelhante a levantar a sua carga, porém, não a carregá-la." (Pitágoras)

    • Marcado como Resposta Salatiel Bairros quarta-feira, 12 de junho de 2013 19:06
    quarta-feira, 12 de junho de 2013 19:02
  • Obrigado a todos, minha dúvida foi sanada.

    Abraço.


    ------------------------------------------------------------ Salatiel C. Bairros Graduando em Engenharia de Computação - UNIPAMPA Desenvolvedor Web estagiário na empresa Impulso Web Soluções Digitais. Telefones: (53) 9952-8178 e (53) 3247-2630 ------------------------------------------------------------

    quarta-feira, 12 de junho de 2013 19:07