While looking at this question and it's answers I thought that it would be a good idea to write an extension method for System.Console
that contained the desired functionality.
However, when I tried it, I got this compiler error
System.Console': static types cannot be used as parameters
Here's the code:
using System; using System.Runtime.CompilerServices; namespace ConsoleApplication1 { public static class ConsoleExtensions { [Extension] public static string TestMethod(this Console console, string testValue) { return testValue; } } }
Is there another way of creating extension methods for static types? Or is this just not possible?
No. Extension methods require an instance variable (value) for an object.
Extension methods are defined as static methods but are called by using instance method syntax. Their first parameter specifies which type the method operates on. The parameter is preceded by the this modifier.
Of course they can; most of Linq is built around interface extension methods.
An extension method must be a static method. An extension method must be inside a static class -- the class can have any name. The parameter in an extension method should always have the "this" keyword preceding the type on which the method needs to be called.
It's not possible, as mentioned in Matt's answer.
As a workaround you could create a static class that will wrap Console adding desired functionality.
public static class ConsoleEx { public static void WriteLineRed(String message) { var oldColor = Console.ForegroundColor; Console.ForegroundColor = ConsoleColor.Red; Console.WriteLine(message); Console.ForegroundColor = oldColor; } }
It's not ideal, as you have to add that little "Ex", but flows with code decently well, if that's any (ehm) consolation:
ConsoleEx.WriteLineRed("[ERROR]")
No it's not possible unfortunately. See Static extension methods
A few people have suggested it: http://madprops.org/blog/static-extension-methods/
...but it was never done in .NET 4. Apparently extension properties got someway to making it but was then abandoned.
https://blogs.msdn.com/ericlippert/archive/2009/10/05/why-no-extension-properties.aspx
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With