2009-10-31 17 views
23

this questionを見て、その答えは、希望の機能を含むSystem.Consoleの拡張メソッドを書くことをお勧めします。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; 
     } 

    } 
} 

をパラメータとして、静的な型が を使用することはできませんここでは、コードがあります:私はそれをしようとしたとき

はしかし、私はこのコンパイラエラー

System.Console」を得ました

静的型の拡張メソッドを作成する別の方法はありますか?それともこれはできないのですか?

答えて

20

いいえ、残念ながらそれはできません。 http://madprops.org/blog/static-extension-methods/

を...しかし、それはどうやら拡張プロパティは、それを作るに何らかの方法だが、その後放棄された.NET 4で行われていませんでした:参照してくださいStatic extension methods

少数の人々がそれを示唆しています。

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

15

マットの答えで述べたように、それは、不可能です。

回避策として、コンソールに目的の機能を追加してラップする静的クラスを作成できます。

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]") 
関連する問題