重寫的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