C#重写字符串类型的GetHashCode

时间:2012-06-26 13:57:34

标签: c# override

是否可以覆盖字符串,int,int32等的GetHashCode方法。

我不想创建一个新的对象或类并将其覆盖掉。我想知道是否有办法覆盖类型的方法。类似于扩展但不是真的。

string myString = "sometext";
myString.GetHashCode(); -- I want to override this method. 

3 个答案:

答案 0 :(得分:2)

不,你不能。即使您添加了扩展方法,如果存在实例方法和具有相同签名的扩展方法,则实例方法也会获胜。您也无法延长stringint,因为它们已被封存。你能做的最好的事情是用一个string / int属性创建一个全新的类/结构,用你自己的实现覆盖GetHashCode(你可以提供隐式转换到stringint如果你想要的话。

答案 1 :(得分:1)

我认为只有在另一个班级才能做到这一点[http://stackoverflow.com/questions/371328/why-is-it-important-to-override-gethashcode-when-equals-method-is-重写型-C]

另外,我认为你不想全局覆盖它,因为其他东西会使用基础GetHashCode()

最后,问问自己“你为什么要这样做?”如果你没有一个很好的理由,你就不需要这样做。

答案 2 :(得分:1)

如果你不想创建自己的类,那么不,因为只能在子类中进行覆盖。

另一种方法是创建一个自定义扩展方法,如:

public static class MyExtensions
{
    public static int GetHashCode2(this string s)
    { 
         // Implementation
    }
}

这会产生类似的效果,但您需要拨打.GetHashCode2()而不是.GetHashCode()