C# Language Usando explícitamente un método de extensión


Ejemplo

Los métodos de extensión también pueden usarse como métodos de clase estática ordinarios. Esta forma de llamar a un método de extensión es más detallada, pero es necesaria en algunos casos.

static class StringExtensions
{
    public static string Shorten(this string text, int length) 
    {
        return text.Substring(0, length);
    }
}

Uso:

var newString = StringExtensions.Shorten("Hello World", 5);

Cuándo llamar a los métodos de extensión como métodos estáticos.

Todavía hay escenarios en los que necesitarías usar un método de extensión como método estático:

  • Resolución de conflictos con un método miembro. Esto puede suceder si una nueva versión de una biblioteca introduce un nuevo método de miembro con la misma firma. En este caso, el compilador preferirá el método miembro.
  • Resolución de conflictos con otro método de extensión con la misma firma. Esto puede suceder si dos bibliotecas incluyen métodos de extensión similares y los espacios de nombres de ambas clases con métodos de extensión se usan en el mismo archivo.
  • Pasando el método de extensión como un grupo de método en el parámetro delegado.
  • Haciendo su propio enlace a través de la Reflection .
  • Usando el método de extensión en la ventana Inmediato en Visual Studio.

Usando estática

Si se using static una directiva using static que usa para traer miembros estáticos de una clase estática al alcance global, se omiten los métodos de extensión. Ejemplo:

using static OurNamespace.StringExtensions; // refers to class in previous example

// OK: extension method syntax still works.
"Hello World".Shorten(5);
// OK: static method syntax still works.
OurNamespace.StringExtensions.Shorten("Hello World", 5);
// Compile time error: extension methods can't be called as static without specifying class.
Shorten("Hello World", 5);

Si elimina this modificador del primer argumento del método Shorten , se compilará la última línea.