Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/339.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#重写字符串类型上的GetHashCode_C#_Overriding - Fatal编程技术网

C#重写字符串类型上的GetHashCode

C#重写字符串类型上的GetHashCode,c#,overriding,C#,Overriding,是否可以覆盖字符串、int、int32等的GetHashCode方法 我不想创建一个新的对象或类并覆盖它。我想知道是否有方法重写该类型的方法。类似于扩展,但不是真正的扩展 string myString = "sometext"; myString.GetHashCode(); -- I want to override this method. 我想你只能在另一节课上做[http://stackoverflow.com/questions/371328/why-is-it-importan

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

我不想创建一个新的对象或类并覆盖它。我想知道是否有方法重写该类型的方法。类似于扩展,但不是真正的扩展

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

我想你只能在另一节课上做[http://stackoverflow.com/questions/371328/why-is-it-important-to-override-gethashcode-when-equals-method-is-overriden-in-c]

另外,我不认为您希望全局覆盖它,因为很可能其他东西会使用该基GetHashCode()


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

我认为你只有在另一门课上才能这样做[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()
,因为重写只能在子类中进行,所以不能

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

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

这将产生类似的效果,但您需要调用
.GetHashCode2()
而不是
.GetHashCode()
不,您不能。即使您添加了一个扩展方法,如果有一个实例方法和一个被调用的扩展方法具有相同的签名,那么实例方法将获胜。您也不能扩展
string
int
,因为它们是密封的。您所能做的最好的事情就是创建一个全新的类/结构,该类/结构带有string/int属性,该属性使用您自己的实现重写GetHashCode(如果需要,您也可以提供到
string
int
的隐式转换。

不,您不能。即使添加了扩展方法,如果调用了具有相同签名的实例方法和扩展方法,则实例方法获胜。您也不能扩展
string
int
因为它们是密封的。您最好使用string/int属性创建一个全新的类/结构,该属性使用您自己的实现重写GetHashCode(如果需要,您也可以提供到
string
int
的隐式转换。

我只有一个问题:为什么?不,很抱歉,如果不从基类继承,您不能重写方法,
string
structs
不能从中继承。我只有一个问题:为什么?不,很抱歉,您不能重写m未从基类继承的ethod和
string
structs
不能从继承。