Carregando...

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.

Tin with this in constructor

csharp
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.

Pine builds one tin

csharp
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

Pronto para Começar

Teste Seu Conhecimento

Desafie-se com este questionário interativo e veja o quão bem você entende o tópico

❓
6
Perguntas
🎯
70%
Para Passar
♾️
∞
Tempo
🔄
∞
Tentativas

📝 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