Inicializadores de objetos y colecciones
Establezca propiedades de forma concisa al crear objetos.
Inicializadores de objetos y colecciones es una lección gratuita de C# Academy en CoddyKit. Esta es la lección 3 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de C# Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de C# Academy incluye 4 lecciones en total.
¿Qué es un inicializador de objetos?
Un inicializador de objetos establece propiedades o campos públicos justo después de new, dentro de { }, sin tener que escribir un constructor para cada combinación.
using System;
class Person
{
public string Name { get; set; }
public int Age { get; set; }
}
class Program
{
static void Main()
{
var p = new Person { Name = "Ada", Age = 36 };
Console.WriteLine(p.Name + ", " + p.Age);
}
}Sintaxis de los inicializadores
Enumere las asignaciones de propiedades, separadas por comas, dentro de las llaves. Se ejecutan después de que finaliza el constructor.
using System;
class Car
{
public string Make { get; set; }
public string Model { get; set; }
public int Year { get; set; }
}
class Program
{
static void Main()
{
var car = new Car
{
Make = "Toyota",
Model = "Corolla",
Year = 2022
};
Console.WriteLine(car.Year + " " + car.Make + " " + car.Model);
}
}Combinación de constructor e inicializador
Puede llamar a un constructor Y usar un inicializador. El constructor se ejecuta primero y, después, el inicializador asigna las propiedades indicadas.
using System;
class Widget
{
public string Id { get; }
public string Label { get; set; }
public Widget(string id) { Id = id; }
}
class Program
{
static void Main()
{
var w = new Widget("w1") { Label = "Submit" };
Console.WriteLine(w.Id + ": " + w.Label);
}
}Inicialización de solo algunas propiedades
Solo tiene que indicar las propiedades que le interesen; el resto conserva sus valores predeterminados. Esto hace que los inicializadores sean flexibles.
using System;
class Settings
{
public bool DarkMode { get; set; } = false;
public int Volume { get; set; } = 50;
public string Lang { get; set; } = "en";
}
class Program
{
static void Main()
{
var s = new Settings { DarkMode = true };
Console.WriteLine(s.DarkMode + ", " + s.Volume + ", " + s.Lang);
}
}Inicializadores de colecciones
Un inicializador de colecciones rellena una lista, un conjunto o una matriz en el momento de la creación mediante { } con elementos separados por comas.
using System;
using System.Collections.Generic;
class Program
{
static void Main()
{
var nums = new List<int> { 1, 2, 3, 4, 5 };
Console.WriteLine("Count: " + nums.Count);
Console.WriteLine("Sum: " + Sum(nums));
}
static int Sum(List<int> list)
{
int t = 0;
foreach (var n in list) t += n;
return t;
}
}Cómo funcionan los inicializadores de colecciones
El compilador convierte cada elemento en una llamada a Add(...). Cualquier tipo que tenga un método Add y IEnumerable admite esta sintaxis.
using System;
using System.Collections.Generic;
class Program
{
static void Main()
{
var names = new List<string> { "Ann", "Bob", "Cara" };
foreach (var n in names)
Console.WriteLine(n);
}
}Inicializadores de diccionarios
Los diccionarios se pueden inicializar con pares clave/valor entre llaves, lo que resulta muy práctico para las tablas de búsqueda.
using System;
using System.Collections.Generic;
class Program
{
static void Main()
{
var ages = new Dictionary<string, int>
{
["Ann"] = 30,
["Bob"] = 25
};
Console.WriteLine("Ann is " + ages["Ann"]);
}
}Inicializadores de objetos anidados
Un inicializador de objetos puede inicializar objetos anidados y construir un pequeño grafo de objetos en una sola expresión.
using System;
class Address
{
public string City { get; set; }
}
class Customer
{
public string Name { get; set; }
public Address Home { get; set; } = new Address();
}
class Program
{
static void Main()
{
var c = new Customer
{
Name = "Lin",
Home = new Address { City = "Tokyo" }
};
Console.WriteLine(c.Name + " in " + c.Home.City);
}
}Colecciones de objetos
Combine ambas características: inicialice una lista cuyos elementos se construyan a su vez con inicializadores de objetos.
using System;
using System.Collections.Generic;
class Item
{
public string Name { get; set; }
public decimal Price { get; set; }
}
class Program
{
static void Main()
{
var cart = new List<Item>
{
new Item { Name = "Pen", Price = 1.5m },
new Item { Name = "Book", Price = 9.0m }
};
decimal total = 0;
foreach (var i in cart) total += i.Price;
Console.WriteLine("Total: " + total);
}
}Inicializadores y propiedades init
Los inicializadores de objetos son la forma de establecer propiedades que solo tienen init, ya que solo se pueden asignar durante la inicialización.
using System;
class Config
{
public string Env { get; init; }
public int Retries { get; init; }
}
class Program
{
static void Main()
{
var c = new Config { Env = "prod", Retries = 3 };
Console.WriteLine(c.Env + " / " + c.Retries);
}
}Integración
Los inicializadores hacen que la construcción sea declarativa y legible, especialmente en objetos de configuración y datos de prueba.
using System;
using System.Collections.Generic;
class Team
{
public string Name { get; set; }
public List<string> Members { get; set; } = new List<string>();
}
class Program
{
static void Main()
{
var t = new Team
{
Name = "Alpha",
Members = { "Ann", "Bob", "Cara" }
};
Console.WriteLine(t.Name + " has " + t.Members.Count + " members");
}
}Comprobación rápida
Compruebe cuánto comprende sobre los inicializadores.
Recapitulación
Los inicializadores de objetos establecen miembros públicos en { } después de new y se ejecutan después del constructor. Los inicializadores de colecciones agregan elementos mediante llamadas implícitas a Add, y los diccionarios admiten pares clave/valor. Ambos pueden anidarse, funcionan con propiedades init y hacen que la construcción sea concisa y declarativa.
using System;
using System.Collections.Generic;
class Demo
{
public string Name { get; set; }
public List<int> Nums { get; set; } = new List<int>();
}
class Program
{
static void Main()
{
var d = new Demo { Name = "x", Nums = { 1, 2, 3 } };
Console.WriteLine(d.Name + " " + d.Nums.Count);
}
}Preguntas frecuentes
¿La lección «Inicializadores de objetos y colecciones» es gratis?
Sí — el texto completo de «Inicializadores de objetos y colecciones» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de C# Academy, actualiza a CoddyKit PRO. El curso de C# Academy incluye 4 lecciones en total.
¿Qué aprenderé en «Inicializadores de objetos y colecciones»?
Establezca propiedades de forma concisa al crear objetos. Practicas C# Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.
¿Necesito experiencia previa para empezar C# Academy?
No se requiere experiencia previa. C# Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 3 de 4.
¿Cuánto tiempo toma la lección «Inicializadores de objetos y colecciones»?
La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.
¿Puedo escribir y ejecutar código en esta lección de C# Academy?
Sí. Cada lección de C# Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.
Todas las lecciones de este curso
- Definición de constructores
- Encadenamiento de constructores con this
- Inicializadores de objetos y colecciones
- Constructores estáticos