Cargando...

this

Escribe una clase Tin con un campo int llamado size y un constructor Tin(int size) que pone this.size = size;. En Pine, conserva Main y construye un tin con Tin t = new Tin(7);, luego escribe t.size. Mantén ambos tipos en el mismo archivo de enseñanza para que dotnet run siga siendo simple. Ejecuta con dotnet run. La pantalla debería mostrar una línea: 7. El parámetro y el campo comparten el nombre size. La palabra this nombra el campo en el objeto para que el guardado llegue al lugar correcto. Usar this cuando los nombres chocan es lo que enseña esta página. Mantén el nombre de la clase pública de inicio Pine.

Por qué el mismo nombre necesita this

En la página de constructores el parámetro era n y el campo era size, así que size = n; quedaba claro. Aquí ambos nombres son size. Dentro del constructor, un size suelto significa el parámetro. Escribir size = size; copia el parámetro sobre sí mismo y deja el campo en su valor por defecto. El campo del objeto todavía necesita una escritura. Esa escritura pone this.size en el lado izquierdo.
Abre el archivo Pine. El nombre de la clase de inicio sigue siendo Pine. Esta página no renombra el iniciador. Borra cualquier resto de Box b = new Box(4); si esa llamada de constructores es todo lo que aún tienes en Main. Borra cualquier resto de la clase Box. Borra cualquier línea ReadLine. El archivo que guardas no espera escritura.
Fuera de las llaves de Pine — todavía en el mismo archivo — escribe public class Tin. Dentro de las llaves declara int size;. Luego escribe el constructor: Tin(int size) { this.size = size; }. En esta página no hay Main dentro de Tin. Guarda el archivo antes de ejecutar.
Lee la asignación una vez más. El lado derecho size es el valor que llegó en el parámetro — aquí 7. El lado izquierdo this.size es el campo del objeto que se está construyendo. Después de que corre la línea, el size de ese objeto tiene 7. Si quitas this. y dejas size = size;, la pantalla más tarde muestra 0 porque el campo nunca cambió.

Tin with this in constructor

csharp
using System;

public class Tin
{
    int size;

    Tin(int size)
    {
        this.size = size;
    }
}

Pine construye un tin

Pine conserva public static void Main(). Dentro de Main, escribe Tin t = new Tin(7); luego Console.WriteLine(t.size);. El argumento 7 se convierte en el parámetro del constructor size. El constructor lo guarda con this.size = size;. En esta página no necesitas una línea aparte t.size = 7;. En esta página no escribes Box b = new Box(4);. Esa fue la lección de constructores.

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;
    }
}

Lee el archivo guardado desde arriba. using System; prepara nombres cortos. public class Pine es el iniciador. public static void Main() es donde arranca el tiempo de ejecución. La expresión new Tin(7) construye un Tin y llama Tin(int size) con el parámetro igual a 7. El cuerpo escribe this.size = size, así que el campo del objeto pasa a ser 7. Luego Main escribe t.size y la pantalla muestra 7.
Ejecútalo con dotnet run. El programa escribe una línea y para. No espera a que tú escribas. Si dotnet run espera, ReadLine sigue en el archivo. Borra esa línea y mantén en Pine new Tin(7) más la escritura, con this.size = size; en Tin. La pantalla muestra 7. Si la pantalla muestra 4, aún corre un camino sobrante new Box(4). Si la pantalla muestra 0, el cuerpo del constructor probablemente es size = size; sin this. — vuelve a poner this. en el lado izquierdo.
Si pones void delante del nombre del constructor, se convierte en un método ordinario, no en un constructor, y new Tin(7) no ejecutará ese cuerpo como esta página espera. La cabecera debe verse como Tin(int size), no void Tin(int size).

this.size y size lado a lado

Una tabla corta mantiene claros los dos nombres mientras estás dentro del constructor.

📊 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
La tabla es solo un recordatorio. La línea tipada que conservas es this.size = size; dentro del constructor, luego en Pine Tin t = new Tin(7); y Console.WriteLine(t.size);.

Comparado con la página de constructores

En la página de constructores, Box(int n) { size = n; } funcionaba porque n y size eran palabras distintas. Esa forma sigue funcionando. Esta página usa a propósito la misma palabra dos veces para que necesites this. Una demo sobrante de Box con size = n; es otra lección. Para esta página mantén Tin y Pine y this.size = size;.
Escribir solo Console.WriteLine(t); no muestra un 7 limpio. Escribe Console.WriteLine(t.size); para ver el número guardado. La referencia al objeto sola no es el valor del campo.
Todavía puedes elegir otro nombre de parámetro en otros días. Esta lección elige a propósito nombres coincidentes. No mezcles n y this en la misma demo de Tin de esta página. Un camino claro basta: nombres coincidentes, this en el campo, escritura del campo.

Dos tins siguen separados

Cada new Tin(...) ejecuta el constructor de nuevo para un objeto aparte. Puedes escribir Tin a = new Tin(2); y Tin b = new Tin(9);, luego escribir ambos campos size. Cada llamada usa this.size = size; en su propio objeto. Los dos objetos no comparten un solo hueco size. No necesitas una segunda caja de código para esa comprobación — cambia los números en Pine cuando ya viste 7, o conserva la demo de un solo tin como el archivo que guardas.
Si ambas líneas muestran 0, al constructor aún le falta this en el lado izquierdo. Si la compilación no encuentra Tin al compilar Pine, comprueba que public class Tin esté en el mismo archivo.

Qué deja esta página para métodos de instancia

Esta página usa this solo dentro del constructor para guardar un campo. Una página posterior — métodos de instancia — muestra métodos que corren sobre un objeto y pueden leer o cambiar campos. Quédate aquí con el guardado en el constructor. No inventes métodos extra en Tin para esta lección a menos que ya los conozcas; el objetivo de la lección es this.size = size cuando los nombres coinciden.
No anides Tin dentro de las llaves de Pine. En esta página las dos clases quedan como hermanas en el archivo. Si Pine aún tiene Box b = new Box(4); de la demo de constructores y este archivo no tiene una clase Box que quieras conservar, quita esa línea. Mantén Tin t = new Tin(7); y Console.WriteLine(t.size);. La compilación no inventará un Box por ti mientras enseñas Tin.

Puedes declarar int size;, escribir Tin(int size) { this.size = size; } y construir con Tin t = new Tin(7); desde Pine.Main. Ejecuta con dotnet run. La pantalla muestra 7. La palabra this nombra el campo del objeto cuando el parámetro usa el mismo nombre. Pasaste el número al construir, el constructor lo guardó con this, y la escritura demostró el guardado. Piensa en this como un puntero al objeto que se está construyendo cuando un nombre suelto significaría el parámetro en su lugar. Pine sigue siendo la puerta que abres con dotnet run. La página siguiente son métodos de instancia, donde los métodos del objeto usan campos después de que el objeto ya existe.
Mantén la cabecera del constructor sin void. Mantén this. en el campo. Mantén la escritura en t.size. Esos tres hábitos son el punto de control de esta página antes de seguir.

🧠 Pon a Prueba tu Conocimiento

Listo para Empezar

Pon a Prueba tu Conocimiento

Ponte a prueba con este cuestionario interactivo y descubre qué tan bien entiendes el tema

❓
6
Preguntas
🎯
70%
Para Aprobar
♾️
∞
Tiempo
🔄
∞
Intentos

📝 Instrucciones

  • Lee cada pregunta cuidadosamente
  • Selecciona la mejor respuesta para cada pregunta
  • Puedes repetir el quiz tantas veces como quieras
  • Tu progreso se mostrará en la parte superior