Novedades de .net 3.5. Creación de objetos más rapida con constructores anónimos

Son varias las mejores que incluye c# 3 frente a las versiones anteriores, y seguramente la mayor es la inclusión de LINQ pero no vamos a hablar en este momento de LINQ, si no de los constructores anónimos.

Bien es verdad que estos constructores anónimos (aunque más que hablar de constructores anónimos deberíamos hablar de tipos anónimos ya que todo esto es mucho más extenso como veremos más adelante).

¿De que hablamos cuando hablamos de constructores anónimos?

Pues bien, veamos un ejemplo práctico de todo esto y seguro que lo entendemos mejor. Supongamos que tenemos una entidad sencillita llamada Empleado y esta tiene varios miembros, varias propiedades para acceder a esos miembros y un constructor. La clase sería algo parecido a esto:

public class Employee
{
#region members
private string _name;
private string _surname;
private Address _address;
#endregion
#region properties
public string Name
{
get { return _name; }
set { _name = value; }
}
public string Surname
{
get { return _surname; }
set { _surname = value; }
}
public Address Address
{
get { return _address; }
set { _address = value; }
}
#endregion
#region constructor
public Employee(){}
public Employee(string name, string surname, string address, string city, string country)
{
_name = name;
_surname = surname;
_address = new Address(address, city, country);
}
#endregion
}

Siendo Address otra entidad de negocio cuyo implementación sería la siguente:

public class Address
{
#region members
private string _address;
private string _city;
private string _country;
#endregion
#region properties
public string AddressName
{
get { return _address; }
set { _address = value; }
}
public string City
{
get { return _city; }
set { _city = value; }
}
public string Country
{
get { return _country; }
set { _country = value; }
}
#endregion
#region Constructor
public Address(){}
public Address(string address, string city, string country)
{
_address = address;
_city = city;
_country = country;
}
#endregion
}

Asi pues teniendo que trabajar con estas entidades, en el momento de instanciar un objeto Empleado, tendriamos que hacer lo siguiente:

Employee e = new Employee("Pepe", "Pérez", "Carlos Marx", "Zaragoza", "España");

O tambien tendríamos la posibilidad de instanciarlo así:

Address a = new Address();
a.AddressName = "Mijaíl Bakunin";
a.City = "Barcelona";
a.Country = "España";
Employee e = new Employee();
e.Name = "Alberto";
e.Surname = "García";
e.Address = a;

Pues ahora no es necesario señores porque como he dicho antes en c# 3 para dar soporte a LINQ se han incluido los tipos anónimos de manera que los programadores nos vamos a poder aprovechar de su inicialización de objetos, y asi podríamos instanciar un empleado sin tener que implementar un constructor de la siguiente manera:

Employee e = new Employee()
{
Name = "Paco",
Surname = "Mendoza",
Address = new Address()
{
AddressName="Errico Malatesta",
City = "Madrid",
Country = "España"
},
};

Hay que entender que esta forma de instanciar un objeto sería la equivalente a la segunda mostrada anteriormente ya que lo primero que se ejecutaría sería y el constructor y a continuación se irían asignando los valores por medio de las propiedades que exponen a los miembros.

Como hemos visto, esto no representa una mejora sustancial, pero si que es verdad que puede agilizar el desarrollo aunque yo creo que el uso o no de estos constructores serán más una cuestión de estilo que de otra cosa.

Enlaces relacionados

5 pensamientos en “Novedades de .net 3.5. Creación de objetos más rapida con constructores anónimos

  1. ¿Que son los tipos anónimos? « a deshoras

  2. ¿Que es Linq? « a deshoras

  3. Ejemplo práctico. Binding de entidades generadas con Linq to Xml a Repeaters. « a deshoras

  4. Hola, me parece un excelente articulo y es cierto todo lo expuesto. Solo hay un pequeño error en los nombres. Este nuevo metodo de crear una instancia de una clase no constituye en realidad un constructor anonimo puesto que si existe un constructor y tiene nombre. El verdadero nombre de esta caracteristica es Inicializador de Objeto (Object Initializer) y se usa en forma obligatoria con los tipos anonimos.

    Solo esa pequeña aclaración. Saludos.

Deja un comentario