C# Language
Inicializadores de objetos
Buscar..
Sintaxis
- SomeClass sc = new SomeClass {Property1 = value1, Property2 = value2, ...};
- SomeClass sc = new SomeClass (param1, param2, ...) {Property1 = value1, Property2 = value2, ...}
Observaciones
Los paréntesis del constructor solo se pueden omitir si el tipo que se está creando tiene un constructor predeterminado (sin parámetros) disponible.
Uso simple
Los inicializadores de objetos son útiles cuando necesita crear un objeto y establecer un par de propiedades de inmediato, pero los constructores disponibles no son suficientes. Di que tienes una clase
public class Book
{
public string Title { get; set; }
public string Author { get; set; }
// the rest of class definition
}
Para inicializar una nueva instancia de la clase con un inicializador:
Book theBook = new Book { Title = "Don Quixote", Author = "Miguel de Cervantes" };
Esto es equivalente a
Book theBook = new Book();
theBook.Title = "Don Quixote";
theBook.Author = "Miguel de Cervantes";
Uso con tipos anónimos
Los inicializadores de objetos son la única forma de inicializar tipos anónimos, que son tipos generados por el compilador.
var album = new { Band = "Beatles", Title = "Abbey Road" };
Por esa razón, los inicializadores de objetos se utilizan ampliamente en las consultas de selección de LINQ, ya que proporcionan una manera conveniente de especificar qué partes de un objeto consultado le interesan.
var albumTitles = from a in albums
select new
{
Title = a.Title,
Artist = a.Band
};
Uso con constructores no predeterminados
Puede combinar inicializadores de objetos con constructores para inicializar tipos si es necesario. Tomemos por ejemplo una clase definida como tal:
public class Book {
public string Title { get; set; }
public string Author { get; set; }
public Book(int id) {
//do things
}
// the rest of class definition
}
var someBook = new Book(16) { Title = "Don Quixote", Author = "Miguel de Cervantes" }
Esto primero creará una instancia de un Book
con el constructor Book(int)
, luego establecerá cada propiedad en el inicializador. Es equivalente a:
var someBook = new Book(16);
someBook.Title = "Don Quixote";
someBook.Author = "Miguel de Cervantes";