Можно ли написать методы расширения для консоли?
Рассматривая этот вопрос, и он отвечает, я подумал, что было бы неплохо написать метод расширения для System.Console
, содержащий требуемую функциональность.
Однако, когда я попробовал, я получил эту ошибку компилятора
System.Console ': статические типы не могут использоваться как параметры
Здесь код:
using System;
using System.Runtime.CompilerServices;
namespace ConsoleApplication1
{
public static class ConsoleExtensions
{
[Extension]
public static string TestMethod(this Console console, string testValue)
{
return testValue;
}
}
}
Есть ли другой способ создания методов расширения для статических типов? Или это просто невозможно?
Ответы
Ответ 1
Нет, к сожалению, это невозможно. См. Статические методы расширения
Несколько человек предложили это:
http://madprops.org/blog/static-extension-methods/
... но это не было сделано в .NET 4. По-видимому, свойства расширения получили что-то, чтобы сделать это, но затем были оставлены.
https://blogs.msdn.com/ericlippert/archive/2009/10/05/why-no-extension-properties.aspx
Ответ 2
Это невозможно, как упоминалось в ответе Мэтта.
В качестве обходного пути вы можете создать статический класс, который добавит Console, добавив желаемую функциональность.
public static class ConsoleEx
{
public static void WriteLineRed(String message)
{
var oldColor = Console.ForegroundColor;
Console.ForegroundColor = ConsoleColor.Red;
Console.WriteLine(message);
Console.ForegroundColor = oldColor;
}
}
Это не идеально, поскольку вам нужно добавить этот маленький "Ex", но поток с кодом прилично хорошо, если это какое-то (ehm) утешение:
ConsoleEx.WriteLineRed("[ERROR]")