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 código de pieza, compilador de piezas "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éjeme dar un ejemplo.
No hay método en la clase String que se nombra GobbleGobble, por lo que vamos a crear 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 sólo mi convención de nombres, no es necesario darle un nombre como ese, pero tiene que ser estático, al igual que el método.
Después de declarar el método anterior, se puede, en Visual Studio, escriba lo siguiente:
String s = "Turkey Baster!";
s.
después del punto, esperar a que IntelliSense, y notar que hay un método GobbleGobble allí, completar el código como el siguiente:
String s = "Turkey Baster!";
s.GobbleGobble();
Importante: la clase en la que se declara el método de extensión debe estar disponible para el compilador y el procesador intelisense con el fin de intelliSense para mostrar el método. Si escribe GobbleGobble manualmente, y usa Ctrl + . atajo, no le ayudará a obtener el derecho de usar directivas en el archivo.
Observe que el parámetro del método ha desaparecido. El compilador silenciosamente moverse por las partes 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 código anterior será transformada por el compilador para esto:
String s = "Turkey Baster!";
StringExtensions.GobbleGobble(s);
Así que en llamadas en tiempo, no hay nada mágico al respecto, 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, sólo la primera soporta el modificador this
, y el resto tiene que ser especificado como parte de la llamada al método como normales:
public static void GobbleGobble(this string value, string extra)
{ | |
... | |
} | |
| |
+--------------------------------------------+ |
| |
v |
s.GobbleGobble("extra goes here"); |
^ |
| |
+-----------------------------------+
Los métodos de extensión fue agregado en parte debido a Linq, donde la sintaxis Linq de C# buscará métodos de extensión apropiadamente nombrados para los objetos en juego, lo que significa que usted puede "presentar" Linq-support en cualquier tipo de clase simplemente declarando los métodos de extensión correctos. Por supuesto, el soporte completo de Linq es mucho trabajo, pero es posible.
Además, los métodos de extensión en sí mismos son realmente útiles, así que lea sobre él.
He aquí algunos enlaces:
Pish tosh, no deberías contestar de todos modos, ¡ya deberías estar haciéndome un buen editor de diagramas! :) (ah, y gracias por la clase de alabanza señor!) –
Definitivamente voy a comenzar a usar el término "engullir engullir magia". – chris
Youtube rompió el enlace nuevamente, http://www.youtube.com/watch?v=Bz_heb9Rz2g, aún en @ 1: 00 en adelante. –