Extension Methods

Una de las nuevas funcionalidades de C# 3.0 fue la
posibilidad de ampliar los métodos de una clase ya existente. Con ello,
conseguimos aprovechar al máximo las clases ya predeterminadas, añadiéndole
alguna funcionalidad que nos es requerida para nuestra aplicación. De no ser así,
deberíamos tener estos métodos en clases distintas y perderíamos esa
unificación.

He recuperado un pequeño ejemplo de msdn, donde añadimos un nuevo método a la
clase String con el que podemos contar las palabras de una cadena.

Para ello, he creado un proyecto web con un texbox y un botón. Añado un
proyecto de tipo librería para almacenar mi clase «Extensions» dónde
especifico el nuevo método que agregaré a esta clase. De esta manera puedo utilizar mis extensiones en cualquier otro proyecto que lo necesite.

using System;

namespace Extensions
{
public static class Extensions
{
public static int ContarPalabras(this String str)
{
return str.Split(new[]{'','.','?'}, StringSplitOptions.RemoveEmptyEntries).Length;
}
}
}


Como podemos ver, creamos un método con el nombre que queremos que aparezca
dentro de nuestra clase. Como parámetros (aquí está la clave) le indicamos que
este método (this) pertenece a la clase String.
El contenido del mismo es exactamente igual que cualquier otro método. En este caso,
lo único que hacemos es crearnos un array, a raíz de un split realizado a la
cadena que está instanciada en nuestra clase String, y retornamos el tamaño de
ese array, omitiendo los blancos.
Importamos la librería a nuestro proyecto web y, si nos creamos un String y
comprobamos la lista de posibilidades nos aparecería lo siguiente:


Para comprobar esta funcionalidad, defino un evento click para mi botón y recojo la cadena introducida por el usuario para comprobar su tamaño.

using System;

namespace ExtensionMethod
{
public partial class Default : System.Web.UI.Page
{
protected void btnContar_Click(object sender, EventArgs e)
{
string cad = txtCadena.Text;
lblResult.Text = string.Format("La cadena tiene {0} palabras", cad.ContarPalabras());
}
}
}


 
¡Saludos!

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *