Constructores
Escribe una clase Box con un campo int llamado size y un constructor Box(int n) que pone size = n;. En Pine, conserva Main y construye una caja con Box b = new Box(4);, luego escribe b.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: 4. El número que pasas a new llega al constructor, y el constructor lo guarda en el objeto antes de que Main continúe. Poner el campo al construir — dentro del constructor — es lo que enseña esta página. Mantén el nombre de la clase pública de inicio Pine.
Un método que corre cuando new construye
Un constructor tiene el mismo nombre que la clase. No tiene tipo de retorno void ni ningún otro tipo de retorno. Cuando Main escribe new Box(4), C# construye el objeto y ejecuta ese constructor con 4 como n. Después de que termina el constructor, la variable sostiene el objeto listo. Ese es todo el trabajo de esta página: pasa un valor a new, deja que el constructor lo guarde en el campo, luego escribe el campo para ver que el guardado funcionó.
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 c.fill = 3; si esa asignación de Cup es todo lo que aún tienes en Main. Borra cualquier resto de la clase Cup. 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 Box. Dentro de las llaves declara int size;. Luego escribe el constructor: Box(int n) { size = n; }. En esta página usa un nombre de parámetro distinto de size para que la asignación quede clara sin la palabra this. En esta página no hay Main dentro de Box. Guarda el archivo antes de ejecutar.
La línea del campo sola no pone 4 dentro del objeto. El cuerpo del constructor hace ese trabajo cuando new lo llama. Si omites el constructor y solo declaras el campo, un new Box(4) posterior no coincidirá, y la compilación se quejará de la llamada. Mantén ambas piezas en Box: el campo y el constructor que escribe en él.
using System;
public class Box
{
int size;
Box(int n)
{
size = n;
}
}
Pine pasa 4 a new Box
Pine conserva public static void Main(). Dentro de Main, escribe Box b = new Box(4); luego Console.WriteLine(b.size);. El argumento 4 entra en el parámetro del constructor n. En esta página no necesitas una línea aparte b.size = 4; — el constructor ya guardó el valor. La línea de escritura está para que confíes en lo que hizo el constructor sin adivinar. En esta página no escribes c.fill = 3;. Esa fue la lección de campos.
using System;
public class Pine
{
public static void Main()
{
Box b = new Box(4);
Console.WriteLine(b.size);
}
}
public class Box
{
int size;
Box(int n)
{
size = n;
}
}
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 Box(4) construye un Box y llama Box(int n) con n igual a 4. El cuerpo escribe size = n, así que el size de ese objeto pasa a ser 4. Luego Main escribe b.size y la pantalla muestra 4. Nada más debería imprimirse.
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 Box(4) más la escritura, con el constructor en Box. La pantalla muestra 4. Si la pantalla muestra 3, aún corre un camino sobrante c.fill = 3;. Si la pantalla muestra ok, puede quedar una demo antigua de Chip en el archivo. No reinstales el SDK de .NET por una pantalla que muestra la línea incorrecta.
Si escribes new Box() sin argumento mientras el único constructor pide un int, la compilación rechaza. Haz coincidir la llamada con la lista de parámetros del constructor. Si pones void delante del nombre del constructor, se convierte en un método ordinario, no en un constructor, y new Box(4) no ejecutará ese cuerpo como esta página espera. La cabecera debe verse como Box(int n), no void Box(int n), ni static int Box(int n).
Comparado con asignar después de new
En la página de campos escribiste c.fill = 3; después de new Cup(). Eso sigue funcionando. Esta página mueve el guardado al interior del constructor para que el valor se ponga mientras se construye el objeto. Una demo sobrante de Cup con c.fill = 3; es otra lección. Para esta página mantén Box y Pine y new Box(4). Si Pine aún tiene c.fill = 3; y este archivo no tiene clase Cup, quita esa línea. La compilación no inventará un Cup por ti.
Escribir solo Console.WriteLine(b); no muestra un 4 limpio. Escribe Console.WriteLine(b.size); para ver el número guardado. La referencia al objeto sola no es el valor del campo. Ya aprendiste ese patrón en la página de campos; mantenlo aquí cuando compruebes el trabajo del constructor.
Todavía puedes asignar un campo después de new en otros programas. Esta lección simplemente elige el camino del constructor para que el primer valor útil llegue al construir. No mezcles ambos estilos en la misma demo de Pine de esta página. Un camino claro basta: argumento a new, guardado en el constructor, escritura del campo.
Dos cajas, dos sizes
Cada new Box(...) ejecuta el constructor de nuevo para un objeto aparte. Puedes escribir Box a = new Box(2); y Box b = new Box(9);, luego escribir ambos campos size. La primera llamada guarda 2 en un objeto. La segunda guarda 9 en otro. Los dos objetos no comparten un solo hueco size.
using System;
public class Pine
{
public static void Main()
{
Box a = new Box(2);
Box b = new Box(9);
Console.WriteLine(a.size);
Console.WriteLine(b.size);
}
}
public class Box
{
int size;
Box(int n)
{
size = n;
}
}
Ejecuta de nuevo con dotnet run. La pantalla debería mostrar 2 en una línea y 9 en la siguiente. Cada llamada al constructor guardó su propio argumento en su propio objeto. Escribir Box b = a; no construye un segundo objeto — usa dos llamadas new Box(...) cuando quieras dos sizes. Copiar una referencia no es lo mismo que llamar al constructor dos veces.
Si ambas líneas muestran el mismo número, comprueba que cada new pasa un argumento distinto y que escribes a.size y b.size en ese orden. Si la compilación se detiene en el segundo new, busca un paréntesis faltante o un nombre de clase incorrecto de una forma anterior. Los errores pequeños en la segunda llamada son comunes cuando pegas la primera línea y olvidas cambiar el argumento.
Qué deja esta página para this
Esta página usa size = n; con nombres distintos. Una página posterior — this — muestra cómo hablar del campo propio del objeto cuando los nombres chocan. Quédate aquí con el nombre claro del parámetro n. No inventes this.size en esta página a menos que ya lo conozcas; el objetivo de la lección es la llamada al constructor desde new. La palabra this es el tema siguiente, no un requisito para guardar n en size hoy.
No anides Box dentro de las llaves de Pine. En esta página las dos clases se sientan como hermanas en el archivo. Si la compilación no encuentra Box al compilar Pine, comprueba que public class Box esté en el mismo archivo. Si la pantalla muestra 0, puede faltar la asignación en el constructor, o Main aún usa una forma sin argumento que nunca pone size — mantén Box(int n) { size = n; } y new Box(4). Un cero en la pantalla suele significar que el campo se quedó en el valor por defecto porque el guardado nunca corrió.
Puedes declarar int size;, escribir Box(int n) { size = n; } y construir con Box b = new Box(4); desde Pine.Main. Ejecuta con dotnet run. La pantalla muestra 4. El constructor corre cuando new construye el objeto. Pasaste el número al construir, el constructor lo guardó en el campo, y la escritura demostró el guardado. Piensa en el constructor como la preparación que corre antes de que Main continúe después de new. Pine sigue siendo la puerta que abres con dotnet run. La página siguiente es this, donde aprendes otra forma de nombrar los campos propios del objeto dentro de sus métodos y constructores.
Mantén la cabecera del constructor sin void. Mantén el argumento en new. Mantén la escritura en b.size. Esos tres hábitos son el punto de control de esta página antes de seguir.
🧠 Pon a Prueba tu Conocimiento
Pon a Prueba tu Conocimiento
Ponte a prueba con este cuestionario interactivo y descubre qué tan bien entiendes el tema
📝 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