Saltar al contenido
¿Qué es el método de extensión en C#?

¿Qué es el método de extensión en C#?

A menudo recibo preguntas sobre el método de extensión en C#. El método de extensión se introdujo en C# versión 3.0. y nos permite agregar funcionalidades en una clase existente sin modificarla, extenderla o volver a compilarla.

4min read

A menudo recibo preguntas sobre el método de extensión en C#. El método de extensión se introdujo en C# versión 3.0. y nos permite agregar funcionalidades en una clase existente sin modificarla, extenderla o volver a compilarla.

Esencialmente, el Método de Extensión nos permite agregar un nuevo método a una clase existente:

  • Sin modificarlo ni añadir código
  • Sin extenderlo ni crear un nuevo tipo derivado
  • Sin volver a compilar la clase
Los métodos de extensión son un tipo especial de método estático, pero se pueden llamar en objetos como un método de instancia. Por lo tanto, un método de extensión se puede usar de la misma manera que los métodos de instancia normales.

Los métodos de extensión son un tipo especial de método estático, pero se pueden llamar en objetos como un método de instancia. Por lo tanto, un método de extensión se puede usar de la misma manera que los métodos de instancia normales.

Pasos para crear un método de extensión

Paso 1: Defina una clase visible estática que contendrá el método de extensión o los métodos de extensión. Asegúrese de que la clase es visible para el código de cliente aplicando el modificador de acceso adecuado.

Paso 2: Cree un método estático con al menos el mismo nivel de visibilidad que la clase contenedora.

Paso 3: El primer parámetro del método de extensión siempre especifica el tipo en el que opera el método. Asegúrese de que el nombre del tipo esté precedido por el modificador "this".

Paso 4: En el código de llamada, agregue el espacio de nombres que contiene la clase Extension Method.

Paso 5: Use el método Extension en el tipo en la misma instancia que se puede usar el método. Tenga en cuenta que no necesitamos pasar el primer parámetro porque denota el tipo, sin embargo, debemos pasar el segundo parámetro para llamar al método de extensión.

¡Vamos a crear un método de extensión!

Sigamos adelante y creemos un método Extension para la clase String. La clase string no tiene ningún método WordCount. Comencemos con la creación de un proyecto de aplicación de consola y luego agreguemos una clase al proyecto de aplicación de consola. Nombraremos la clase StringExtension.

Una vez creada la clase, tenemos que realizar los pasos como se ha comentado anteriormente:

  1. Haga que la clase sea estática y pública en este caso
  2. Add a static method
  3. Dado que la clase es pública, haga público también el método
  4. Pase el primer parámetro del método estático como el nombre de la clase precedido por la palabra clave "this"
  5. Escriba el código dentro del método para implementar la funcionalidad
namespace ExtensionMethodDemo
{
    public static class StringExtension
    {
        public static int WordCount(this string s)
        {
            int count = 0;
            for (int i = 0; i < s.Length; i++)
            {
                if (s[i] != ' ')
                {
                    if ((i + 1) == s.Length)
                    {
                        count++;
                    }
                    else
                    {
                        if (s[i + 1] == ' ')
                        {
                            count++;
                        }
                    }
                }
            }
            return count;
        }
    }
}

En la lista de código anterior, hemos creado un método de extensión para contar el número de palabras en una cadena determinada. Es posible que observe que:

  1. La clase StringExtension es una clase estática pública;
  2. El método WordCount es un método estático público;
  3. El primer parámetro del método WordCount es una cadena porque estamos creando WordCount como un método de extensión de la clase de cadena;
  4. El primer tipo de parámetro string va precedido de la palabra clave "this".

Antes de usar el método de extensión, compilemos el proyecto. Para ello, necesitamos realizar los siguientes pasos:

  1. Agregue DLL al proyecto del cliente, si hemos creado un método de extensión en una biblioteca diferente.
  2. Agregue el espacio de nombres de la clase Extension Method con la directiva using.
  3. Utilice el método de extensión como método de instancia normal.

Podemos usar el método de extensión recién creado como se muestra en la lista a continuación:

using System;

namespace ExtensionMethodDemo
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Enter a senetence");
            string inputstr = Console.ReadLine();
            int numberofword = inputstr.WordCount();
            Console.WriteLine(numberofword);
            Console.ReadKey(true);
        }
    }
}

Como observamos en la lista anterior, el método de extensión WordCount se usa para contar el número de palabras en una oración. Visual Studio también muestra los métodos de extensión en IntelliSense, anexando la palabra extensión junto al nombre del método, como se muestra en la imagen siguiente:

muestra los métodos de extensión en IntelliSense, anexando la palabra extensión junto al nombre del método, como se muestra en la imagen siguiente

Como vemos, podemos usar un Método de Extensión de la misma manera que cualquier método de instancia. Podría haber un escenario en el que tengamos un método de instancia y un método de extensión con el mismo nombre y firma. En ese caso, siempre el método de instancia tiene más prioridad sobre el método de extensión.  Hay algunos puntos importantes que debemos tener en cuenta sobre el Método de Extensión:

  1. Tiene menos prioridad que el método de instancia, por lo que si una clase tiene un método de extensión y un método de instancia con el mismo nombre y firma, el método de instancia tiene prioridad.
  2. Si un método de extensión entra en conflicto con un método miembro de tipo de destino, siempre se invoca el método miembro en lugar del método de extensión.
  3. El método de extensión solo puede tener acceso a los miembros privados del tipo de destino.

Los métodos de extensión son muy útiles para agregar funcionalidad en una clase existente. Muchas funciones LINQ se implementan como métodos de extensión. Espero que la información proporcionada aquí te ayude en tus proyectos, ¡y gracias por leer!

Solicitar una demostración