Compartir vía


Procedimiento para implementar e invocar un método de extensión personalizado (Guía de programación de C#)

En este artículo se muestra cómo implementar sus propios métodos de extensión para cualquier tipo de .NET. El código cliente puede usar sus métodos de extensión. Los proyectos cliente deben hacer referencia al ensamblaje que los contiene. Los proyectos cliente deben añadir una directiva using que especifique el espacio de nombres en el que se definen los métodos de extensión.

Para definir y llamar al método de extensión:

  1. Defina una class estática que contenga el método de extensión. La clase no puede estar anidada dentro de otro tipo y debe ser visible para el código cliente. Para obtener más información sobre las reglas de accesibilidad, vea Modificadores de acceso.
  2. Implemente el método de extensión como un método estático con al menos la misma visibilidad que la clase contenedora.
  3. El primer parámetro del método especifica el tipo en el que opera el método; debe ir precedido del modificador this.
  4. En el código de llamada, agregue una directiva using para especificar el espacio de nombres que contiene la clase del método de extensión.
  5. Llame a los métodos como métodos de instancia en el tipo.

Nota:

El primer parámetro no se especifica mediante el código de llamada, ya que representa el tipo al que se aplica el operador y el compilador ya conoce el tipo del objeto. Solo tiene que proporcionar argumentos para los parámetros comprendidos entre el 2 y n.

En el ejemplo siguiente se implementa un método de extensión denominado WordCount en la clase CustomExtensions.StringExtension. El método opera en la clase String, que se especifica como el primer parámetro de método. El espacio de nombres CustomExtensions se importa en el espacio de nombres de la aplicación y se llama al método dentro del método Main.

using CustomExtensions;

string s = "The quick brown fox jumped over the lazy dog.";
// Call the method as if it were an
// instance method on the type. Note that the first
// parameter is not specified by the calling code.
int i = s.WordCount();
System.Console.WriteLine("Word count of s is {0}", i);


namespace CustomExtensions
{
    // Extension methods must be defined in a static class.
    public static class StringExtension
    {
        // This is the extension method.
        // The first parameter takes the "this" modifier
        // and specifies the type for which the method is defined.
        public static int WordCount(this string str)
        {
            return str.Split(new char[] {' ', '.','?'}, StringSplitOptions.RemoveEmptyEntries).Length;
        }
    }
}

La resolución de sobrecargas prefiere los métodos de instancia o estáticos definidos por el propio tipo a los métodos de extensión. Los métodos de extensión no pueden tener acceso a los datos privados de la clase extendida.

Consulte también