A veces es necesario agregar nueva funcionalidad a una clase y no deseamos modificar el código de esa clase; ya sea porque no tenemos acceso al código fuente o porque no deseamos tocar algo que ya funciona.
Con c# 3.0 estas clases se pueden extender; para hacerlo es necesario hacer lo siguiente:
-Agregar una clase estática con un método estático. El primer parámetro de la "nueva clase" se agrega automáticamente, pero es necesario marcarlo con la palabra this. cuando esta clase es creada dicho objeto es pasado automáticamente al método.
De esta manera el método agregado en la clase extensora aparece en el intellisense del objeto original.
Ejemplo:
Si tenemos una clase Customer y deseamos agregarle un método para renombrar el nombre del cliente la clase quedaría de la siguiente manera:
public static class CustomerExtender
{
public static void ChangeName(this Customer cust, String newName)
{
cust.Name = newName;
}
}
Donde el parámetro cust es el objeto Customer original. De esta manera podemos usar el siguiente código:
Customer customer = new Customer("Smart");
customer.ChangeName("Walmart");
customer.Save();
¡Como si el método ChangeName existiera en la clase original!.
Con c# 3.0 estas clases se pueden extender; para hacerlo es necesario hacer lo siguiente:
-Agregar una clase estática con un método estático. El primer parámetro de la "nueva clase" se agrega automáticamente, pero es necesario marcarlo con la palabra this. cuando esta clase es creada dicho objeto es pasado automáticamente al método.
De esta manera el método agregado en la clase extensora aparece en el intellisense del objeto original.
Ejemplo:
Si tenemos una clase Customer y deseamos agregarle un método para renombrar el nombre del cliente la clase quedaría de la siguiente manera:
public static class CustomerExtender
{
public static void ChangeName(this Customer cust, String newName)
{
cust.Name = newName;
}
}
Donde el parámetro cust es el objeto Customer original. De esta manera podemos usar el siguiente código:
Customer customer = new Customer("Smart");
customer.ChangeName("Walmart");
customer.Save();
¡Como si el método ChangeName existiera en la clase original!.
Comentarios
Publicar un comentario