Is there any way in C# to override a class method with an extension method?

c#, extension-methods, overriding

Solution

No; an extension method never takes priority over an instance method with a suitable signature, and never participates in polymorphism (`GetHashCode` is a `virtual` method).

Problem

There have been occasions where I would want to override a method in a class with an extension method. Is there any way to do that in C#? For example: ``` public static class StringExtension { public static int GetHashCode(this string inStr) { return MyHash(inStr); } } ``` A case where I've wanted to do this is to be able to store a hash of a string into a database and have that same value be used by all the classes that use the string class's hash (i.e. Dictionary, etc.) Since the built-in .NET hashing algorithm is not guaranteed to be compatible from one version of the framework to the next, I want to replace it with my own. There are other cases I've run into where I'd want to override a class method with an extension method as well so it's not just specific to the string class or the `GetHashCode` method. I know I could do this with subclassing off an existing class but it would be handy to be able to do it with an extension in a lot of cases.

Original source