【问题标题】:Is it possible to write extension methods for Console? [duplicate]是否可以为控制台编写扩展方法? [复制]
【发布时间】:2010-12-11 22:47:21
【问题描述】:

查看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;
        }

    }
}

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

【问题讨论】:

    标签: c# console extension-methods


    【解决方案1】:

    这是不可能的,正如马特的回答中提到的那样。

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

    【讨论】:

      【解决方案2】:

      不,很遗憾,这是不可能的。见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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-11-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-02-08
        相关资源
        最近更新 更多