Dominando a Palavra-chave this em C#
Dominando a Palavra-chave this em C#
Explore a versátil palavra-chave this em C# através de explicações concisas e exemplos de código do mundo real.
Em C#, this refere-se à instância atual de uma classe. É indispensável para distinguir entre membros de instância e parâmetros de método, invocar construtores sobrecarregados, passar o objeto atual para outros métodos e declarar indexadores.
using System; namespace ThisKeyword { class Teste { int num; Teste(int num) { // this.num refere-se ao campo de instância this.num = num; Console.WriteLine("objeto de this: " + this); } static void Main(string[] args) { Teste t1 = new Teste(4); Console.WriteLine("objeto de t1: " + t1); Console.ReadLine(); } } }
Saída
objeto de this: ThisKeyword.Teste objeto de t1: ThisKeyword.Teste
Tanto t1 quanto this referem-se à mesma instância; assim suas representações em string correspondem.
Desambiguando Variáveis com Mesmo Nome
Campos de instância e parâmetros podem compartilhar um nome, mas sem this o compilador trata a referência como o parâmetro, deixando o campo intocado.
using System; namespace ThisKeyword { class Teste { int num; Teste(int num) { num = num; // atribui parâmetro a si mesmo, campo permanece padrão (0) } static void Main(string[] args) { Teste t1 = new Teste(4); Console.WriteLine("valor de num: " + t1.num); Console.ReadLine(); } } }
Saída
0
A saída é zero porque a atribuição não afeta o campo. Usando this resolve a ambiguidade:
using System; namespace ThisKeyword { class Teste { int num; Teste(int num) { // this.num refere-se ao campo de instância this.num = num; } static void Main(string[] args) { Teste t1 = new Teste(4); Console.WriteLine("valor de num: " + t1.num); Console.ReadLine(); } } }
Saída
valor de num: 4
Encadeamento de Construtores com this
Quando uma classe oferece múltiplos construtores, um pode chamar outro para centralizar lógica de inicialização. Isso é alcançado com a palavra-chave this após dois pontos na assinatura do construtor.
using System; namespace ThisKeyword { class Teste { Teste(int num1, int num2) { Console.WriteLine("Construtor com dois parâmetros"); } // invoca o construtor de dois parâmetros Teste(int num) : this(33, 22) { Console.WriteLine("Construtor com um parâmetro"); } public static void Main(string[] args) { Teste t1 = new Teste(11); Console.ReadLine(); } } }
Saída
Construtor com dois parâmetros Construtor com um parâmetro
O construtor de um parâmetro primeiro executa o construtor de dois parâmetros, então continua com seu próprio corpo. Este padrão, conhecido como encadeamento de construtores, mantém a lógica de inicialização DRY.
Passando a Instância Atual para Métodos
Às vezes um método precisa operar no objeto que o invocou. Usar this como argumento torna a intenção explícita.
using System; namespace ThisKeyword { class Teste { int num1; int num2; Teste() { num1 = 22; num2 = 33; } // método que aceita uma instância Teste void PassarParametro(Teste t) { Console.WriteLine("num1: " + t.num1); Console.WriteLine("num2: " + t.num2); } void Exibir() { // passa a instância atual PassarParametro(this); } public static void Main(string[] args) { Teste t1 = new Teste(); t1.Exibir(); Console.ReadLine(); } } }
Saída
num1: 22 num2: 33
Como this representa a instância chamadora, o método pode acessar seus campos privados com segurança.
Declarando um Indexador com this
Indexadores permitem que objetos sejam indexados como arrays. A palavra-chave this declara a assinatura do indexador.
using System; namespace ThisKeyword { class Aluno { private string[] nomes = new string[3]; // Declaração do indexador public string this[int indice] { get { return nomes[indice]; } set { nomes[indice] = value; } } } class Program { public static void Main() { Aluno a = new Aluno(); a[0] = "Ram"; a[1] = "Shyam"; a[2] = "Gopal"; for (int i = 0; i < 3; i++) { Console.WriteLine(a[i]); } } } }
Saída
Ram Shyam Gopal
O array privado nomes é acessado via indexador, mantendo encapsulamento intacto enquanto oferece sintaxe semelhante a array.
Para um mergulho mais profundo em indexadores, consulte a documentação oficial da Microsoft: Indexador em C#.
Linguagem C
- Palavra-chave Static em C#: Dominando Variáveis, Métodos e Classes Estáticas
- Dominando a Palavra-chave Global do Python: Como e Quando Usá-la
- Palavra-chave this em Java: Usos Práticos, Construtores e Mais
- Entendendo a Palavra-chave final em Java: Variáveis, Métodos e Classes
- Testando o Sensor de Temperatura DS18B20 no Raspberry Pi
- Framework de Automação de Testes Coded UI: Guia Completo para Iniciantes
- Turck TB3-CP80: Caixa de Teste de Sensor de Precisão para Sensores Indutivos, Magnéticos, Capacitivos e Fotoelétricos
- Pomona MP1 Ponta de Prova Magnética – Jack de Segurança 4mm, Ângulo Reto para Diagnóstico Industrial Preciso
- Teste Rápido de COVID-19 Baseado em Smartphone Entrega Resultados de Alta Precisão em 10 Minutos
- Teste de Sonda Voadora (FPT): Guia Profissional para Verificação Confiável de Funcionalidade de PCB