Although the methods of Console
are static, its static methods Write()
and WriteLine()
merely redirect the call to Console.Out.Write()
and Console.Out.WriteLine()
respectively. Out
is an instance whose type derives from the abstract class TextWriter
. This makes it possible to define extension methods for TextWriter
:
public static class ConsoleTextWriterExtensions
{
public static void WriteBlueLine(this TextWriter writer, string text)
{
Console.ForegroundColor = ConsoleColor.Blue;
writer.WriteLine(text);
Console.ResetColor();
}
public static void WriteUppercase(this TextWriter writer, string text)
{
writer.Write(text.ToUpper());
}
}
The method can then be invoked like this:
Console.Out.WriteBlueLine();
And the best part is that the type of the standard error stream instance Console.Error
also derives from TextWriter
which makes the same extension method also usable for Console.Error
:
Console.Error.WriteBlueLine();
This can be quite useful if you have defined an extension method like WriteTable()
(for writing a table out to the console) because you can also use it for the error stream or any other object of TextWriter
.
Newer versions of C# allow this to be even shorter with a using static
statement for Console
to get red of the Console.
prefix:
using static System.Console;
Out.WriteBlueLine("A blue line");
Error.WriteBlueLine("A blue line");