this
Escreva uma classe Tin com um campo int chamado size e um construtor Tin(int size) que faz this.size = size;. Em Pine, mantenha Main e construa um tin com Tin t = new Tin(7);, depois escreva t.size. Mantenha os dois tipos no mesmo arquivo de ensino para dotnet run continuar simples. Execute com dotnet run. A tela deve mostrar uma linha: 7. O parâmetro e o campo compartilham o nome size. A palavra this nomeia o campo no objeto para a guarda chegar ao lugar certo. Usar this quando os nomes colidem é o que esta página ensina. Mantenha a classe pública inicial chamada Pine.
Por que o mesmo nome precisa de this
Na página de construtores o parâmetro era n e o campo era size, então size = n; ficava claro. Aqui os dois nomes são size. Dentro do construtor, um size nu significa o parâmetro. Escrever size = size; copia o parâmetro em si mesmo e deixa o campo no valor padrão. O campo no objeto ainda precisa de uma escrita. Essa escrita usa this.size do lado esquerdo.
Abra o arquivo Pine. O nome da classe inicial permanece Pine. Esta página não renomeia o iniciador. Apague qualquer resto Box b = new Box(4); se aquela chamada de construtores ainda for tudo o que você tem em Main. Apague qualquer resto de classe Box. Apague qualquer linha ReadLine. O arquivo que você guarda não espera digitação.
Fora das chaves de Pine — ainda no mesmo arquivo — escreva public class Tin. Dentro das chaves declare int size;. Depois escreva o construtor: Tin(int size) { this.size = size; }. Não há Main em Tin nesta página. Salve o arquivo antes de executar.
Leia a atribuição mais uma vez. O lado direito size é o valor que chegou no parâmetro — aqui 7. O lado esquerdo this.size é o campo no objeto sendo construído. Depois que a linha roda, o size daquele objeto guarda 7. Se você tirar this. e mantiver size = size;, a tela depois mostra 0 porque o campo nunca mudou.
using System;
public class Tin
{
int size;
Tin(int size)
{
this.size = size;
}
}
Pine constrói um tin
Pine mantém public static void Main(). Dentro de Main, escreva Tin t = new Tin(7); depois Console.WriteLine(t.size);. O argumento 7 vira o parâmetro do construtor size. O construtor guarda com this.size = size;. Você não precisa de uma linha separada t.size = 7; nesta página. Você não escreve Box b = new Box(4); nesta página. Essa era a lição de construtores.
using System;
public class Pine
{
public static void Main()
{
Tin t = new Tin(7);
Console.WriteLine(t.size);
}
}
public class Tin
{
int size;
Tin(int size)
{
this.size = size;
}
}
Leia o arquivo guardado de cima. using System; prepara nomes curtos. public class Pine é o iniciador. public static void Main() é onde o runtime começa. A expressão new Tin(7) constrói um Tin e chama Tin(int size) com o parâmetro igual a 7. O corpo escreve this.size = size, então o campo do objeto vira 7. Depois Main escreve t.size e a tela mostra 7.
Execute com dotnet run. O programa escreve uma linha e para. Não espera você digitar. Se dotnet run esperar, ReadLine ainda está no arquivo. Apague essa linha e mantenha new Tin(7) mais a escrita em Pine, com this.size = size; em Tin. A tela mostra 7. Se a tela mostrar 4, um caminho restante new Box(4) ainda está rodando. Se a tela mostrar 0, o corpo do construtor provavelmente é size = size; sem this. — coloque this. de volta no lado esquerdo.
Se você acrescentar void antes do nome do construtor, vira um método comum, não um construtor, e new Tin(7) não vai executar aquele corpo do jeito que esta página espera. O cabeçalho deve parecer Tin(int size), não void Tin(int size).
this.size e size lado a lado
Uma tabela curta mantém os dois nomes claros enquanto você está dentro do construtor.
📊 this.size vs size
| Name | What it means in Tin(int size) |
|---|---|
size alone |
the parameter that entered the constructor |
this.size |
the field on the object being built |
this.size = size; |
store the parameter into the field |
size = size; |
does not update the field |
A tabela é só um lembrete. A linha digitada que você guarda é this.size = size; dentro do construtor, depois Tin t = new Tin(7); e Console.WriteLine(t.size); em Pine. |
Comparado com a página de construtores
Na página de construtores, Box(int n) { size = n; } funcionava porque n e size eram palavras diferentes. Essa forma ainda funciona. Esta página usa de propósito a mesma palavra duas vezes para você precisar de this. Uma demo Box restante com size = n; é outra lição. Para esta página mantenha Tin e Pine e this.size = size;.
Escrever só Console.WriteLine(t); não mostra um 7 limpo. Escreva Console.WriteLine(t.size); para ver o número guardado. A referência do objeto sozinha não é o valor do campo.
Você ainda pode escolher outro nome de parâmetro noutros dias. Esta lição escolhe nomes combinados de propósito. Não misture n e this na mesma demo Tin nesta página. Um caminho claro basta: nomes combinados, this no campo, escrita do campo.
Dois tins continuam separados
Cada new Tin(...) executa o construtor de novo para um objeto separado. Você pode escrever Tin a = new Tin(2); e Tin b = new Tin(9);, depois escrever os dois campos size. Cada chamada usa this.size = size; no próprio objeto. Os dois objetos não compartilham um único espaço size. Você não precisa de uma segunda caixa de código para essa checagem — mude os números em Pine depois de já ter visto 7, ou mantenha a demo de um tin como o arquivo que você salva.
Se as duas linhas mostrarem 0, o construtor ainda está sem this no lado esquerdo. Se a compilação não encontrar Tin ao compilar Pine, confira que public class Tin está no mesmo arquivo.
O que esta página deixa para métodos de instância
Esta página usa this só dentro do construtor para guardar um campo. Uma página depois — métodos de instância — mostra métodos que rodam num objeto e podem ler ou mudar campos. Fique com a guarda do construtor aqui. Não invente métodos extras em Tin para esta lição a menos que você já os conheça; o objetivo da lição é this.size = size quando os nomes combinam.
Não aninhe Tin dentro das chaves de Pine. Nesta página as duas classes ficam como irmãs no arquivo. Se Pine ainda tem Box b = new Box(4); da demo de construtores e este arquivo não tem classe Box correspondente que você queira manter, remova essa linha. Mantenha Tin t = new Tin(7); e Console.WriteLine(t.size);. A compilação não inventa um Box para você quando você está ensinando Tin.
Você pode declarar int size;, escrever Tin(int size) { this.size = size; }, e construir com Tin t = new Tin(7); a partir de Pine.Main. Execute com dotnet run. A tela mostra 7. A palavra this nomeia o campo do objeto quando o parâmetro usa o mesmo nome. Você passou o número na construção, o construtor guardou com this, e a escrita provou a guarda. Pense em this como um ponteiro para o objeto sendo construído quando um nome nu significaria o parâmetro. Pine continua a porta que você abre com dotnet run. A próxima página é métodos de instância, onde métodos no objeto usam campos depois que o objeto já existe.
Mantenha o cabeçalho do construtor sem void. Mantenha this. no campo. Mantenha a escrita em t.size. Esses três hábitos são o ponto de verificação desta página antes de seguir.
🧠 Teste Seu Conhecimento
Teste Seu Conhecimento
Desafie-se com este questionário interativo e veja o quão bem você entende o tópico
📝 Instruções
- Leia cada pergunta cuidadosamente
- Selecione a melhor resposta para cada pergunta
- Você pode refazer o quiz quantas vezes quiser
- Seu progresso será mostrado no topo