一尘不染

我可以向现有的静态类添加扩展方法吗?

c#

我很喜欢C#中的扩展方法,但在将扩展方法添加到静态类(例如Console)方面并没有取得成功。

例如,如果我想向控制台添加一个名为“ WriteBlueLine”的扩展,以便可以进行以下操作:

Console.WriteBlueLine("This text is blue");

我通过添加一个本地的,公共的静态方法(使用Console作为“ this”参数)来尝试了此操作……但是没有骰子!

public static class Helpers {
    public static void WriteBlueLine(this Console c, string text)
    {
        Console.ForegroundColor = ConsoleColor.Blue;
        Console.WriteLine(text);
        Console.ResetColor();
    }
}

这没有向控制台添加’WriteBlueLine’方法…我做错了吗?还是要求不可能?


阅读 450

收藏
2020-05-19

共1个答案

一尘不染

不能。扩展方法需要对象的实例变量(值)。但是,您可以在ConfigurationManager接口周围编写静态包装。如果实现包装器,则不需要扩展方法,因为可以直接添加该方法。

 public static class ConfigurationManagerWrapper
 {
      public static ConfigurationSection GetSection( string name )
      {
         return ConfigurationManager.GetSection( name );
      }

      .....

      public static ConfigurationSection GetWidgetSection()
      {
          return GetSection( "widgets" );
      }
 }
2020-05-19