Método de extensión en C#

¡Hola geeks!

Hoy vamos a ver los Extension Methods (Métodos de extensión), qué son y cómo se implementan en C#.

¿Qué son?

Nos simplifican la sintaxis de llamada. Representan métodos estáticos como métodos de instancia. Un método de extensión utiliza la palabra clave this en su lista de parámetros. Debe estar ubicado en una clase estática.

Dicho de otra forma, permiten "agregar" métodos a los tipos existentes sin crear un nuevo tipo derivado, recompilar o modificar de otra manera el tipo original. Se caracterizan por ser una clase especial de método estático, pero se les llama si fueran métodos de instancia en el tipo extendido.

¿Cómo se implementan?

Creamos una nueva clase llamada "ListExtensons.cs" o "ExtensionMethods.cs". Aquí será donde creemos los métodos de extensión.

Nota: el fichero debe ser una clase estática con métodos públicos y estáticos.

Entonces, en el resto de nuestro código, podemos invocar estos métodos de extensión igual que los métodos de instancia.

Un ejemplo es el siguiente que utilicé en un proyecto para navegar hacia adelante o atrás en una lista de tipo "IList".    public static class ListExtensions { public static T GetNext<T>(this IList<T> collection, T value) { int nextIndex = collection.IndexOf(value) + 1; if (nextIndex < collection.Count) { return collection[nextIndex]; } else { return value; } } public static T GetPrevious<T>(this IList<T> collection, T value) { int nextIndex = collection.IndexOf(value) - 1; if (nextIndex < collection.Count && nextIndex >= 0) { return collection[nextIndex]; } else { return value; } } } Aquí es importante ver que tengo en la lista de parámetros la palabra clave this seguida con una lista genérica IList. Nota: la única diferencia entre un método estático normal y la de un método de extensión es la palabra this en la lista de parámetros. Si quieres recibir más parámetros, puedes añadirlos al final.

Finalmente, gracias al IntelliSense de Visual Studio podemos llamar a los métodos de extensión igual que los métodos de instancia.

¡Bueno esto ha sido todo por hoy!

¡Hasta la próxima!