Toda classe tem implicitamente declarada uma variável chamada this, do mesmo tipo da classe e que se refere ao objeto corrente. Ela é usada quando for necessário referir-se ao próprio objeto.
Alguns usos comuns da palavra chave this são:
- Qualificação de membros de nomes equivalentes (passados por parâmetro):
1 2 3 4 5 6
public Pessoa(string nome, string sobrenome) { // A utilização do this "qualifica" os membros nome e sobrenome: this.nome = nome; this.sobrenome = sobrenome; }
- Para passar o próprio objeto como parâmetro para um método:
1
CalculaTaxa(this);
- Na declaração de índices:
1 2 3 4 5
public int this[int param] { get { return array[param]; } set { array[param] = value; } }
É bom reforçar que, como membros static existem para a classe e não para a instância desta, é um erro referenciar a variável this dentro de um método ou propriedade static.
Abaixo segue um exemplo completo da utilização dos conceitos citados anteriormente:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 | class Empregado { private string nome; private string sobrenome; private decimal salario = 3000.00m; // Construtor: public Empregado(string nome, string sobrenome) { // A utilização do this "qualifica" os membros nome e sobrenome: this.nome = nome; this.sobrenome = sobrenome; } // Método para imprimir na tela: public void printEmpregado() { Console.WriteLine("nome: {0}\nsobrenome: {1}", nome, sobrenome); // Passa o objeto para o método CalculaTaxa, que é static: Console.WriteLine("Taxas: {0:C}", Taxa.CalculaTax(this)); } public decimal salario { get { return salario; } } } class Taxa { public static decimal CalculaTaxa(Empregado E) { return 0.08m * E.salario; } } class MainClass { static void Main() { // Cria o objeto: Empregado E1 = new Empregado("Mickey", "Mouse"); // Mostra na tela: E1.printEmpregado(); } } /* Saída do console: nome: Mickey sobrenome: Mouse Taxas: $240.00 */ |