2012-06-26 84 views
0

重寫的GetHashCode是否有可能重寫GetHashCode方法爲一個字符串,整型,INT32等。C#在一個字符串類型

我不想創建一個新的對象或類,並覆蓋它那了。我想知道是否有方法來重寫類型的方法。類似於擴展,但不是真的。

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

I只有一個問題:爲什麼? –

+1

不,你不能從一個基類繼承重載一個方法,'string'和'structs'不能被繼承。 – Magnus

回答

1

如果您不想創建自己的類,那麼不需要,因爲覆蓋只能在子類中實現。

另一種方法是創建一個自定義擴展方法,如:

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

這將產生類似的效果,但你需要調用.GetHashCode2()而非.GetHashCode()

1

我想你只能做它,如果它是另一個類[http://stackoverflow.com/questions/371328/why-is-it-important-to-override-gethashcode-when-equals-方法-IS-重寫式-C]

另外,我不認爲你會希望在全球範圍內覆蓋它,因爲有強大的可能罩,其他的事情將要使用該基地的GetHashCode()

最後,問問自己:「你爲什麼要這樣做?」如果你沒有很好的理由,你不需要這樣做。

2

不,你不能。即使你添加了擴展方法,如果有一個實例方法和一個具有相同簽名的擴展方法被調用,那麼該實例方法將獲勝。你也不能延長stringint,因爲它們是密封的。你可以做的最好的事情是創建一個全新的類/結構,其中包含一個字符串/ int屬性,用你自己的實現來覆蓋GetHashCode(如果你願意,你可以提供隱式轉換爲stringint