Estoy tratando de decodificar un fragmento de código de un libro:
List<Person> people = new List<Person>()
{
new Person {FirstName="Homer",LastName="Simpson",Age=47},
new Person {FirstName="Marge",LastName="Simpson",Age=45}
};
Person es solo una clase simple que hicieron, con un montón de campos: Nombre, Apellido, etc.
Lo que no entiendo es, ¿no enviamos parámetros a un constructor de Persona entre paréntesis no rizados? Traté de replicar este código, pero no parece volar, ¿algún tomador?
Gracias por tu aporte.
Respuestas:
C # le permite especificar parámetros de propiedad en llaves cuando se inicializa el objeto. Esto le permite elegir qué elementos inicializar y cuáles dejar como predeterminados.
Un constructor, por otro lado, ejecuta un solo bloque de código con un conjunto fijo de parámetros. Por lo tanto, para obtener el mismo efecto, tendría que crear múltiples constructores, todos con las diversas combinaciones de propiedades que desee inicializar, lo que podría ser tedioso.
es exactamente equivalente a esto:
Excepto que es más corto y posiblemente más fácil para la vista.
También permite construcciones como las que demostró en su pregunta, lo que sería muy tedioso si tuviera que crear variables temporales e inicializarlas como lo hice aquí antes de agregarlas a la lista. (Que es como solía hacerlo). Todo sin requerir un constructor definido explícitamente que tome la lista de parámetros deseada, que puede o no estar disponible.
Además, tenga en cuenta que si bien un constructor puede inicializar propiedades con un setter privado, esta técnica (como debería ser obvio del ejemplo proporcionado) solo funcionará si tiene un setter público para la propiedad. También tenga en cuenta que mi ejemplo abreviado implícitamente llamó al constructor predeterminado (sin parámetros), que por lo tanto tendría que estar presente.
fuente
new Person(lastName: "Simpson")
, omitiendo los parámetrosfirstName
yage
.var x = new Person("Homer", "Simpson", 47);