I’m attempting to use extension methods to add an operater overload to the C# StringBuilder class. Specifically, given StringBuilder sb, I’d like sb += 'text' to become equivalent to sb.Append('text').
Here’s the syntax for creating an extension method for StringBuilder:
public static class sbExtensions { public static StringBuilder blah(this StringBuilder sb) { return sb; } }
It successfully adds the blah extension method to the StringBuilder.
Unfortunately, operator overloading does not seem to work:
public static class sbExtensions { public static StringBuilder operator +(this StringBuilder sb, string s) { return sb.Append(s); } }
Among other issues, the keyword this is not allowed in this context.
Are adding operator overloads via extension methods possible? If so, what’s the proper way to go about it?
This is not currently possible, because extension methods must be in static classes, and static classes can’t have operator overloads. But the feature is being discussed for some future release of C#. Mads talked a bit more about implementing it in this video from 2017.
On why it isn’t currently implemented, Mads Torgersen, C# Language PM says:
Further below in the same article: