This article is currently in the process of being translated into Spanish (~99% done).
Extension Methods
Otra característica genial de C# 3.0 es la Extensión de Métodos. Le permiten extender un tipo existente con nueva funcionalidad, sin tener que crear una sub-clase o recompilar el tipo viejo. Por ejemplo, quizá le gustaría conocer si cierta cadena es un número o no. La aproximación usual sería definir una función y luego llamarla cada vez, y una vez que tenga muchas de estas funciones., le gustaría ponerla juntas en una clase de utileria, como esto:
public class MyUtils
{
public static bool IsNumeric(string s)
{
float output;
return float.TryParse(s, out output);
}
}
Ahora podría checar una cadena al ejecutar una línea de código como esta:
string test = "4";
if (MyUtils.IsNumeric(test))
Console.WriteLine("Yes");
else
Console.WriteLine("No");
Sin embargo, con Extensión de Métodos, puede realmente extender la clase String para soportar esto directamente. Lo hace al definir una clase estática, con un conjunto de métodos estáticos que serán su biblioteca de extensión de métodos. Aquí está un ejemplo:
public static class MyExtensionMethods
{
public static bool IsNumeric(this string s)
{
float output;
return float.TryParse(s, out output);
}
}
La única cosa que separa a esta de cualquier otro método estático, es la palabra clave "this" en la sección de parámetros del método. Esto le dice al compilador que esta es una extensión de métodos para la clase String, y esto es realmente todo lo que usted necesita para crear una extensión de método. Ahora, puede llamar el método IsNumeric() directamente en una cadena, como esto:
string test = "4";
if (test.IsNumeric())
Console.WriteLine("Yes");
else
Console.WriteLine("No");