A Palavra-chave 'this'
Parte da seção Programação Orientada a Objetos do Journey de C# da Coddy — lição 4 de 70.
A palavra-chave this refere-se à instância atual de uma classe. Ela é usada para acessar membros da instância e distinguir entre parâmetros e campos com o mesmo nome.
Use this para distinguir entre campos e parâmetros
public class Person
{
private string name;
private int age;
public Person(string name, int age)
{
this.name = name;
this.age = age;
}
}Sem o this, o parâmetro sombrearia o campo
// Isso não funcionará como esperado
public Person(string name, int age)
{
name = name; // Atribui o parâmetro a si mesmo!
age = age; // Atribui o parâmetro a si mesmo!
}Use this com propriedades
public class Product
{
public string Name { get; set; }
public decimal Price { get; set; }
public Product(string name, decimal price)
{
this.Name = name;
this.Price = price;
}
public void DisplayInfo()
{
Console.WriteLine($"{this.Name}: ${this.Price}");
}
}Use this para chamar outro construtor na mesma classe
public class Rectangle
{
public int Width { get; set; }
public int Height { get; set; }
public Rectangle(int width, int height)
{
this.Width = width;
this.Height = height;
}
// Construtor para quadrados
public Rectangle(int size) : this(size, size)
{
}
}Exemplo de uso:
Rectangle rect = new Rectangle(5, 10);
Rectangle square = new Rectangle(5); // Cria 5x5A palavra-chave this sempre se refere à instância do objeto atual. É especialmente útil quando os nomes dos parâmetros coincidem com os nomes dos campos ou propriedades, tornando seu código mais claro e prevenindo erros.
Desafio
MédioComplete a classe Product adicionando um construtor que usa a palavra-chave this para atribuir valores de parâmetros às propriedades. Também implemente o método GetDescription() usando this para acessar as propriedades.
O método GetDescription() deve retornar: "{Name} costs ${Price}"
Folha de consulta
A palavra-chave this refere-se à instância atual de uma classe e é usada para acessar membros da instância.
Use this para distinguir entre campos e parâmetros com o mesmo nome:
public class Person
{
private string name;
private int age;
public Person(string name, int age)
{
this.name = name;
this.age = age;
}
}Sem o this, o parâmetro sombreia o campo e atribui o valor a si mesmo:
// Isso não funcionará como esperado
public Person(string name, int age)
{
name = name; // Atribui o parâmetro a si mesmo!
age = age; // Atribui o parâmetro a si mesmo!
}Use this com propriedades:
public class Product
{
public string Name { get; set; }
public decimal Price { get; set; }
public Product(string name, decimal price)
{
this.Name = name;
this.Price = price;
}
public void DisplayInfo()
{
Console.WriteLine($"{this.Name}: ${this.Price}");
}
}Use this para chamar outro construtor na mesma classe (encadeamento de construtores):
public class Rectangle
{
public int Width { get; set; }
public int Height { get; set; }
public Rectangle(int width, int height)
{
this.Width = width;
this.Height = height;
}
// Construtor para quadrados
public Rectangle(int size) : this(size, size)
{
}
}
Rectangle square = new Rectangle(5); // Cria 5x5Experimente você mesmo
using System;
class Program
{
static void Main()
{
string name = Console.ReadLine();
decimal price = decimal.Parse(Console.ReadLine());
Product product = new Product(name, price);
Console.WriteLine($"Product: {product.Name}");
Console.WriteLine($"Price: ${product.Price}");
Console.WriteLine(product.GetDescription());
}
}Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.
Todas as lições de Programação Orientada a Objetos
1Fundamentos de POO
Arquivos ExternosNamespaces e DiretivasIntrodução a Classes e ObjetosA Palavra-chave 'this'Métodos e ParâmetrosCampos vs PropriedadesConstrutoresInicializadores de ObjetosRecapitulação - Calculadora Simples4Herança
Sintaxe Básica de Herança (:)A Palavra-chave 'base'Palavras-chave Virtual e OverrideClasses SeladasA Classe Base 'object'Recapitulação - Hierarquia de Funcionários7Recursos Avançados
Sobrecarga de OperadoresIndexadores (this[])Sobrescrita de ToString()Métodos de ExtensãoRecapitulação - Lista Personalizada10Padrões de Projeto Parte 1
Introdução aos Padrões de ProjetoSingleton Thread-SafePadrão FactoryPadrão Observer (Eventos)Padrão Strategy2Propriedades e Membros Estáticos
Propriedades AutoimplementadasPropriedades de Apenas Leitura/EscritaCampos e Métodos EstáticosClasses EstáticasMembros com Corpo de Expressão5Polimorfismo e Interfaces
Polimorfismo: Compilação vs ExecuçãoInterface vs Classe AbstrataMúltiplas InterfacesInterfaces ExplícitasUpcasting e DowncastingRecapitulação - Calculadora de Formas8Conceitos Avançados de POO
Composição sobre HerançaGenerics (Classes e Métodos)Delegates e EventosAtributos e ReflectionIDisposable e a Instrução usingFundamentos de Injeção de Dependência11Padrões de Projeto Parte 2
Padrão CommandPadrão AdapterPadrão DecoratorPadrão Template MethodPadrão StatePadrão Composite3Arquitetura de Classes
Dados de Instância vs EstáticosPalavras-chave 'readonly' e 'const'Campos de SuporteRecapitulação - Gerenciador de Conta Bancária6Encapsulamento
Modificadores de AcessoPropriedades para EncapsulamentoImplementação de Ocultação de DadosPadrões de ImutabilidadeRecapitulação - Registros de Estudantes9Argumentos Variáveis
A Palavra-chave 'params'Parâmetros OpcionaisArgumentos NomeadosSobrecarga de Métodos