0

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

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

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

3 回答 3

2

你不能。即使您添加了扩展方法,如果调用了具有相同签名的实例方法和扩展方法,则实例方法获胜。你也不能延长stringint因为它们是密封的。您能做的最好的事情是创建一个全新的类/结构,它具有一个字符串/整数属性,该属性用您自己的实现覆盖 GetHashCode(您可以提供隐式转换,string或者int如果您愿意,也可以提供。

于 2012-06-26T14:24:21.553 回答
1

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

另外,我认为您不想在全局范围内覆盖它,因为其他东西很可能会使用该基础 GetHashCode()

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

于 2012-06-26T14:01:09.703 回答
1

如果您不想创建自己的类,则不要,因为覆盖只能在子类中进行。

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

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

这将产生类似的效果,但您需要调用.GetHashCode2()而不是.GetHashCode()

于 2012-06-26T14:01:10.930 回答