2010-03-06 18 views

Respuesta

5

Están disponibles para C# y VB. Le permiten simular la adición de métodos a clases que no están bajo su control.

Podría, por ejemplo, agregar un método WordCount a la cadena.

Así que en lugar de

MyStringUtils.WordCount("some string")

Se podía escribir "some string".WordCount().

public static class MyExtensions 
{ 
    public static int WordCount(this String str) 
    { 
     return MyStringUtils.WordCount(str); 
    } 
} 

Esto es estrictamente "azúcar sintáctico" y ayuda en la legibilidad. Básicamente está creando un método estático que se mostrará en IntelliSense para el tipo de destino.

7

No, no se aplican a todos los idiomas. Son una característica específica del lenguaje, ofrecida por C# y Visual Basic (otros lenguajes pueden haberlos adoptado desde, no lo sé).

El objetivo de ellos es proporcionar una sintaxis conveniente para llamar a métodos de utilidad en una clase o interfaz. En C# 2, un método de utilidad sería llamado a través de una clase estática, pasando el argumento de la forma habitual:

IEnumerable<string> someStrings; 
int count = EnumerableHelpers.Count(someStrings); 

Con los métodos de extensión, esto se puede escribir cómodamente usando algo que se parece a la sintaxis normal de método de la barra:

int count = someStrings.Count(); 

aunque Count() no es un miembro de la interfaz IEnumerable<string>. Por lo tanto, los métodos de extensión le permiten aparecer a agregar miembros a clases o interfaces que no controla.

1

¿Se aplican a todos los idiomas?

No, pero algunos idiomas tienen la misma característica, aunque no necesariamente bajo el mismo nombre. Los que conozco son Objective-C y Groovy, donde la función se llama "Categorías".

Cuestiones relacionadas