polimorfico - metodos en c# consola
¿Es posible escribir métodos de extensión para la consola? (2)
Mientras observaba esta pregunta y sus respuestas, pensé que sería una buena idea escribir un método de extensión para System.Console
que contuviera la funcionalidad deseada.
Sin embargo, cuando lo probé, recibí este error del compilador
System.Console '': los tipos estáticos no se pueden usar como parámetros
Aquí está el código:
using System;
using System.Runtime.CompilerServices;
namespace ConsoleApplication1
{
public static class ConsoleExtensions
{
[Extension]
public static string TestMethod(this Console console, string testValue)
{
return testValue;
}
}
}
¿Hay otra forma de crear métodos de extensión para tipos estáticos? ¿O esto simplemente no es posible?
No es posible, como se menciona en la respuesta de Matt.
Como solución alternativa, puede crear una clase estática que envuelva la consola y agregue la funcionalidad deseada.
public static class ConsoleEx
{
public static void WriteLineRed(String message)
{
var oldColor = Console.ForegroundColor;
Console.ForegroundColor = ConsoleColor.Red;
Console.WriteLine(message);
Console.ForegroundColor = oldColor;
}
}
No es ideal, ya que tienes que agregar esa pequeña "Ex", pero fluye con el código decentemente bien, si eso es algo (ehm) consuelo:
ConsoleEx.WriteLineRed("[ERROR]")
No, lamentablemente no es posible. Ver métodos de extensión estática.
Algunas personas lo han sugerido: http://madprops.org/blog/static-extension-methods/
... pero nunca se hizo en .NET 4. Al parecer, las propiedades de extensión lograron hacerlo pero luego se abandonaron.
https://blogs.msdn.com/ericlippert/archive/2009/10/05/why-no-extension-properties.aspx