是否可以为Console编写扩展方法?

时间:2009-10-31 20:30:45

标签: c# console extension-methods

在查看this question及其答案时,我认为为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;
        }

    }
}

是否有另一种为静态类型创建扩展方法的方法?或者这是不可能的?

2 个答案:

答案 0 :(得分:20)

不幸的是,不可能。见Static extension methods

有些人建议: http://madprops.org/blog/static-extension-methods/

...但它从来没有在.NET 4中完成。显然,扩展属性在某种程度上可以实现,但后来被放弃了。

https://blogs.msdn.com/ericlippert/archive/2009/10/05/why-no-extension-properties.aspx

答案 1 :(得分:20)

如Matt的回答所述,这是不可能的。

作为一种解决方法,您可以创建一个静态类,它将包装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]")