Soy un fan de los métodos de extensión en C#, pero no he tenido éxito al agregar un método de extensión a una clase estática, como la consola.¿Puedo agregar métodos de extensión a una clase estática existente?
Por ejemplo, si quiero agregar una extensión a la consola, llamada 'WriteBlueLine', por lo que puedo ir:
Console.WriteBlueLine("This text is blue");
yo probamos este mediante la adición de un método estático locales, públicos, con la consola como un "este" parámetro ... ¡pero no dados!
public static class Helpers {
public static void WriteBlueLine(this Console c, string text)
{
Console.ForegroundColor = ConsoleColor.Blue;
Console.WriteLine(text);
Console.ResetColor();
}
}
Esto no agregó un método 'WriteBlueLine' a la consola ... ¿Lo estoy haciendo mal? ¿O preguntando por lo imposible?
Oh bueno. desafortunado, pero creo que voy a arreglarme. Sigo siendo un método de extensión virgen (en el código de producción de todos modos). Tal vez algún día, si tengo suerte. –
He escrito una serie de extensiones HtmlHelper para ASP.NET MVC. Escribió uno para DateTime para darme el final de la fecha indicada (23: 59.59). Útil cuando le pide al usuario que especifique una fecha de finalización, pero realmente desea que sea el final de ese día. – tvanfosson
No hay forma de agregarlos actualmente porque la característica no existe en C#. No porque sea imposible, sino porque los píos C# están muy ocupados, estaban más interesados en los métodos de extensión para hacer que LINQ funcione y no vieron suficiente beneficio en los métodos de extensión estáticos para justificar el tiempo que tardarían en implementar. [Eric Lippert explica aquí] (http://stackoverflow.com/a/4914207/230390). –