重写的GetHashCode是否有可能重写GetHashCode方法为一个字符串,整型,INT32等。C#在一个字符串类型
我不想创建一个新的对象或类,并覆盖它那了。我想知道是否有方法来重写类型的方法。类似于扩展,但不是真的。
string myString = "sometext";
myString.GetHashCode(); -- I want to override this method.
重写的GetHashCode是否有可能重写GetHashCode方法为一个字符串,整型,INT32等。C#在一个字符串类型
我不想创建一个新的对象或类,并覆盖它那了。我想知道是否有方法来重写类型的方法。类似于扩展,但不是真的。
string myString = "sometext";
myString.GetHashCode(); -- I want to override this method.
如果您不想创建自己的类,那么不需要,因为覆盖只能在子类中实现。
另一种方法是创建一个自定义扩展方法,如:
public static class MyExtensions
{
public static int GetHashCode2(this string s)
{
// Implementation
}
}
这将产生类似的效果,但你需要调用.GetHashCode2()
而非.GetHashCode()
我想你只能做它,如果它是另一个类[http://stackoverflow.com/questions/371328/why-is-it-important-to-override-gethashcode-when-equals-方法-IS-重写式-C]
另外,我不认为你会希望在全球范围内覆盖它,因为有强大的可能罩,其他的事情将要使用该基地的GetHashCode()
最后,问问自己:“你为什么要这样做?”如果你没有很好的理由,你不需要这样做。
不,你不能。即使你添加了扩展方法,如果有一个实例方法和一个具有相同签名的扩展方法被调用,那么该实例方法将获胜。你也不能延长string
或int
,因为它们是密封的。你可以做的最好的事情是创建一个全新的类/结构,其中包含一个字符串/ int属性,用你自己的实现来覆盖GetHashCode(如果你愿意,你可以提供隐式转换为string
或int
,
I只有一个问题:为什么? –
不,你不能从一个基类继承重载一个方法,'string'和'structs'不能被继承。 – Magnus