Esta es la sintaxis para declarar métodos de extensión, una nueva característica de C # 3.0.
Un método de extensión es en parte código, en parte compilador "mágico", donde el compilador con la ayuda de intellisense en Visual Studio hace que parezca que su método de extensión está realmente disponible como un método de instancia en el objeto en cuestión.
Déjame dar un ejemplo.
No hay ningún método en la clase String que se llame GobbleGobble, así que creemos un método de extensión:
public static class StringExtensions
{
public static void GobbleGobble(this string s)
{
Console.Out.WriteLine("Gobble Gobble, " + s);
}
}
El nombre de la clase es solo mi convención de nomenclatura, no es necesario nombrarlo así, pero tiene que ser estático, al igual que el método.
Después de declarar el método anterior, puede, en Visual Studio, escribir esto:
String s = "Turkey Baster!";
s.
después del punto, espere intellisense y observe que hay un método GobbleGobble allí, complete el código de esta manera:
String s = "Turkey Baster!";
s.GobbleGobble();
Importante : La clase donde se declara el método de extensión debe estar disponible para el compilador y el procesador intellisense para que intellisense muestre el método. Si escribe GobbleGobble manualmente y usa el acceso directo Ctrl+ ., no lo ayudará a obtener las directivas de uso correctas en el archivo.
Observe que el parámetro del método ha desaparecido. El compilador se moverá silenciosamente por los bits importantes, que son:
String s = "Turkey Baster!";
s.GobbleGobble();
^ ^
| +-- the compiler will find this in the StringExtensions class
|
+-- will be used as the first parameter to the method
Por lo tanto, el compilador transformará el código anterior a esto:
String s = "Turkey Baster!";
StringExtensions.GobbleGobble(s);
Entonces, en el momento de la llamada, no tiene nada de mágico, es solo una llamada a un método estático.
Tenga en cuenta que si su método de extensión declara más de un parámetro, solo el primero admite el this
modificador, y el resto debe especificarse como parte de la llamada al método como es normal:
public static void GobbleGobble(this string value, string extra)
{ | |
... | |
} | |
| |
+--------------------------------------------+ |
| |
v |
s.GobbleGobble("extra goes here"); |
^ |
| |
+-----------------------------------+
Los métodos de extensión se agregaron en parte debido a Linq, donde la sintaxis Linq de C # buscará métodos de extensión con nombres apropiados para los objetos en juego, lo que significa que puede "introducir" el soporte de Linq en cualquier tipo de clase simplemente declarando la extensión correcta métodos. Por supuesto, el soporte completo de Linq es mucho trabajo, pero es posible.
Además, los métodos de extensión por sí mismos son realmente útiles, así que sigue leyendo.
Aquí hay algunos enlaces: