Extension methods en C#

El post que vamos a ver hoy esta directamente relacionado con el que vimos la semana pasada de los métodos estáticos y es que hoy vamos a ver que son los “Extension methods” los cuales nos permiten ampliar la funcionalidad de un objeto.

1 - Qué son los Extension Methods

Por ejemplo, como recordamos del post de en el que vimos las cadenas de texto el método string posee una serie de funciones o métodos por defecto, como pueden ser .ToUpper(), .ToLower() etc. .NET nos permite extender esa funcionalidad utilizando los extension methods o métodos extensibles.

2 -Como crear extension methods o métodos de extensión.

Para este ejemplo vamos a crear un método que nos convierta la primera letra de una palabra o frase a mayúscula.

Para ello debemos crear un método que realice esta funcionalidad.

public static string PrimeraMaysucula(string fraseInicial)
{
    char primeraLetra = char.ToUpper(fraseInicial[0]);
    string RestoDeFrase = fraseInicial.Substring(1);

    return primeraLetra + RestoDeFrase;
}
Console.WriteLine(PrimeraMaysucula("hello world!"));

Pero como vemos en este método debemos mandar la palabra o frase como parámetro cada vez que queramos esta funcionalidad. Esta forma de programar es correcta, y válida, pero lo podemos hacer mejor. Y aquí es donde entran los extension methods

2.1 – Creación de un extension method

Como hemos indicado un extension method nos permite extender la funcionalidad de un objeto o tipo con métodos estáticos. Con las únicas dos condiciones que son, el método tiene que ser estático y en el primer parámetro, debemos indicar la palabra clave “this”.

Utilizamos la palabra clave this en el primer parámetro para indicarle al compilador a que tipo va a extender. Por lo tanto, el método anterior, nos quedaría de la siguiente forma  

public static class StringExtensions
{
    public static string PrimeraMaysucula(string fraseInicial)
    {
        char primeraLetra = char.ToUpper(fraseInicial[0]);
        string RestoDeFrase = fraseInicial.Substring(1);

        return primeraLetra + RestoDeFrase;
    }
}

//Llamada
Console.WriteLine("hello world!".PrimeraMaysucula());

Como nota adicional indicar que los extension methods se suelen colocar en clases estáticas por supuesto, pero que además su nombre hace referenica, por ejemplo, si vamos a extender el tipo string, lo indicaremos con el nombre StringExtensions si vamos a extender el tipo int la llamaremos IntExtensions

Finalmente indicar que los extension methods pueden ser implementados para cualquier tipo, inclusive los creados por nosotros mismos.