是否可以覆盖字符串、int、int32 等的 GetHashCode 方法。
我不想创建一个新的对象或类并将其覆盖掉。我想知道是否有办法覆盖类型的方法。类似于扩展,但不是真的。
string myString = "sometext";
myString.GetHashCode(); -- I want to override this method.
是否可以覆盖字符串、int、int32 等的 GetHashCode 方法。
我不想创建一个新的对象或类并将其覆盖掉。我想知道是否有办法覆盖类型的方法。类似于扩展,但不是真的。
string myString = "sometext";
myString.GetHashCode(); -- I want to override this method.
你不能。即使您添加了扩展方法,如果调用了具有相同签名的实例方法和扩展方法,则实例方法获胜。你也不能延长string
或int
因为它们是密封的。您能做的最好的事情是创建一个全新的类/结构,它具有一个字符串/整数属性,该属性用您自己的实现覆盖 GetHashCode(您可以提供隐式转换,string
或者int
如果您愿意,也可以提供。
我认为只有在另一个类中才能做到这一点 [http://stackoverflow.com/questions/371328/why-is-it-important-to-override-gethashcode-when-equals-method-is-overriden-in -C]
另外,我认为您不想在全局范围内覆盖它,因为其他东西很可能会使用该基础 GetHashCode()
最后,问问自己“你为什么要这样做?” 如果你没有一个很好的理由,你就不需要这样做。
如果您不想创建自己的类,则不要,因为覆盖只能在子类中进行。
另一种方法是创建一个自定义扩展方法,例如:
public static class MyExtensions
{
public static int GetHashCode2(this string s)
{
// Implementation
}
}
这将产生类似的效果,但您需要调用.GetHashCode2()
而不是.GetHashCode()