在C#中是否有任何方法可以使用扩展方法覆盖类方法?

Phr*_*ert 96 c# extension-methods overriding

在某些情况下,我想要使用扩展方法覆盖类中的方法.有没有办法在C#中做到这一点?

例如:

public static class StringExtension
{
    public static int GetHashCode(this string inStr)
    {
        return MyHash(inStr);
    }
}
Run Code Online (Sandbox Code Playgroud)

在那里我一直想做到这一点的情况是能够将一个字符串的哈希存储到数据库中,并有相同的值由所有使用String类的哈希值(即词典等)由于类使用内置的.Net哈希算法不能保证从一个版本的Framework到下一个版本兼容,我想用我自己的版本替换它.

还有其他情况我遇到了我想用扩展方法覆盖类方法的地方,所以它不仅仅特定于字符串类或GetHashCode方法.

我知道我可以通过子类化现有的类来做到这一点但是在很多情况下能够使用扩展来做它会很方便.

Mar*_*ell 90

没有; 扩展方法永远不会优先于具有合适签名的实例方法,并且永远不会参与多态(GetHashCode是一种virtual方法).

  • @Alex提到虚拟我只是澄清多态的含义.在GetHashCode的几乎所有用途中,具体类型是未知的 - 所以多态性在起作用.因此,即使在常规编译器中优先使用**,扩展方法也无济于事.OP真正需要的是修补猴子.哪个c#和.net不方便. (3认同)
  • 令人遗憾的是,在C#中有如此多的误导性无意义方法,例如数组中的`.ToString()`.这绝对是一个必需的功能. (3认同)

Chr*_*sma 7

如果该方法具有不同的签名,则可以完成 - 因此在您的情况下:否.

但是否则你需要使用继承来做你想要的.