代码之家  ›  专栏  ›  技术社区  ›  CoderDennis

是否可以为控制台编写扩展方法?

  •  23
  • CoderDennis  · 技术社区  · 15 年前

    当你看着 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 回复  |  直到 8 年前
        1
  •  20
  •   Community CDub    7 年前

    不,不幸的是不可能。见 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

        2
  •  20
  •   Sebastian K    8 年前

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

    作为解决方法,您可以创建一个静态类,该类将包装控制台,并添加所需的功能。

    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]")