Подтвердить что ты не робот

Можно ли написать методы расширения для консоли?

Рассматривая этот вопрос, и он отвечает, я подумал, что было бы неплохо написать метод расширения для 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;
        }

    }
}

Есть ли другой способ создания методов расширения для статических типов? Или это просто невозможно?

4b9b3361

Ответ 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]")