Inicializadores de objetos
Parte de la sección Programación Orientada a Objetos del Journey de C# de Coddy — lección 8 de 70.
Los inicializadores de objetos proporcionan una forma conveniente de establecer valores de propiedad al crear un objeto, sin necesidad de llamar a un constructor con muchos parámetros.
Forma tradicional usando el constructor
public class Person
{
public string Name { get; set; }
public int Age { get; set; }
public string City { get; set; }
}
Person person = new Person();
person.Name = "Alice";
person.Age = 25;
person.City = "New York";Uso de la sintaxis de inicializador de objetos
Person person = new Person
{
Name = "Alice",
Age = 25,
City = "New York"
};Inicializadores de objetos con constructores
public class Person
{
public string Name { get; set; }
public int Age { get; set; }
public string City { get; set; }
public Person(string name)
{
Name = name;
}
}
// El constructor establece Name, el inicializador establece otras propiedades
Person person = new Person("Bob")
{
Age = 30,
City = "London"
};Inicializadores de objetos anidados
public class Address
{
public string Street { get; set; }
public string City { get; set; }
}
public class Person
{
public string Name { get; set; }
public Address Address { get; set; }
}
Person person = new Person
{
Name = "Charlie",
Address = new Address
{
Street = "123 Main St",
City = "Boston"
}
};Creación de múltiples objetos con inicializadores
Person person1 = new Person { Name = "Alice", Age = 25 };
Person person2 = new Person { Name = "Bob", Age = 30 };
Person person3 = new Person { Name = "Charlie", Age = 35 };Los inicializadores de objetos hacen que el código sea más limpio y legible. Las propiedades se establecen después de que se ejecuta el constructor. Puedes usar inicializadores con o sin parámetros de constructor, lo que hace que la creación de objetos sea flexible y concisa.
Desafío
IntermedioCrea tres objetos Student usando diferentes enfoques de inicializadores de objetos:
- student1: Usa el constructor predeterminado con un inicializador de objetos para establecer todas las propiedades (Name, StudentId, Major, GPA) desde la entrada
- student2: Usa un inicializador de objetos para establecer solo Name = "Bob" y Major = "Engineering"
- student3: Usa el constructor con "Charlie" como parámetro, luego usa un inicializador de objetos para establecer StudentId = 54321, Major = "Mathematics", GPA = 3.5
Hoja de referencia
Los inicializadores de objetos proporcionan una forma conveniente de establecer valores de propiedad al crear un objeto:
Person person = new Person
{
Name = "Alice",
Age = 25,
City = "New York"
};Los inicializadores de objetos se pueden combinar con constructores:
Person person = new Person("Bob")
{
Age = 30,
City = "London"
};Los inicializadores de objetos anidados permiten establecer propiedades de objetos anidados:
Person person = new Person
{
Name = "Charlie",
Address = new Address
{
Street = "123 Main St",
City = "Boston"
}
};Se pueden crear múltiples objetos de forma concisa:
Person person1 = new Person { Name = "Alice", Age = 25 };
Person person2 = new Person { Name = "Bob", Age = 30 };Pruébalo tú mismo
using System;
class Program
{
static void Main()
{
string name = Console.ReadLine();
int studentId = int.Parse(Console.ReadLine());
string major = Console.ReadLine();
double gpa = double.Parse(Console.ReadLine());
// TODO: Crear student1 usando el inicializador de objetos con todas las propiedades
// Usar el constructor predeterminado y establecer Name, StudentId, Major y GPA
// TODO: Crear student2 usando el inicializador de objetos solo con Name y Major
// Name debe ser "Bob", Major debe ser "Engineering"
// TODO: Crear student3 usando el constructor con el parámetro name "Charlie"
// Luego usar el inicializador de objetos para establecer StudentId = 54321, Major = "Mathematics", GPA = 3.5
Console.WriteLine($"Student 1: {student1.Name} (ID: {student1.StudentId}) - {student1.Major}, GPA: {student1.GPA}");
Console.WriteLine($"Student 2: {student2.Name} (ID: {student2.StudentId}) - {student2.Major}, GPA: {student2.GPA}");
Console.WriteLine($"Student 3: {student3.Name} (ID: {student3.StudentId}) - {student3.Major}, GPA: {student3.GPA}");
}
}Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.
Todas las lecciones de Programación Orientada a Objetos
1Fundamentos de OOP
Archivos externosNamespaces y directivasIntro a clases y objetosLa palabra clave 'this'Métodos y parámetrosCampos vs PropiedadesConstructoresInicializadores de objetosResumen - Calculadora simple4Herencia
Sintaxis básica de herencia (:)La palabra clave 'base'Palabras clave Virtual y OverrideClases selladas (Sealed)La clase base 'object'Resumen: Jerarquía de empleados7Características avanzadas
Sobrecarga de operadoresIndexadores (this[])Sobrescritura de ToString()Métodos de extensiónResumen - Lista personalizada10Patrones de diseño - Parte 1
Introducción a los patrones de diseñoSingleton Thread-SafePatrón FactoryPatrón Observer (Eventos)Patrón Strategy2Propiedades y miembros estáticos
Propiedades autoimplementadasPropiedades de solo lectura y escrituraCampos y métodos estáticosClases estáticasMiembros con cuerpo de expresión5Polimorfismo e Interfaces
Polimorfismo: Compilación vs. EjecuciónInterfaz vs. Clase AbstractaInterfaces MúltiplesInterfaces ExplícitasUpcasting y DowncastingRepaso: Calculadora de Figuras8Conceptos avanzados de POO
Composición sobre herenciaGenéricos (clases y métodos)Delegados y eventosAtributos y ReflexiónIDisposable y la sentencia usingFundamentos de Inyección de dependencias11Patrones de diseño, parte 2
Patrón CommandPatrón AdapterPatrón DecoratorPatrón Template MethodPatrón StatePatrón Composite3Arquitectura de clases
Datos de instancia vs. estáticosPalabras clave 'readonly' y 'const'Campos de respaldoResumen - Gestor de cuentas bancarias6Encapsulamiento
Modificadores de accesoPropiedades para el encapsulamientoImplementación de ocultamiento de datosPatrones de inmutabilidadRepaso - Registros de estudiantes