簡體   English   中英

C#在字符串類型上覆蓋GetHashCode

[英]C# overriding GetHashCode on a string type

是否可以為字符串,int,int32等覆蓋GetHashCode方法。

我不想創建一個新的對象或類並覆蓋它。 我想知道是否有一種方法可以覆蓋類型的方法。 與擴展類似,但並非如此。

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

你不能。 即使添加了擴展方法,如果存在實例方法和具有相同簽名的擴展方法,則實例方法也將獲勝。 您也不能擴展stringint因為它們是密封的。 您能做的最好的事情是創建一個帶有string / int屬性的全新類/結構,該屬性將使用您自己的實現覆蓋GetHashCode(您也可以根據需要提供對stringint隱式轉換。

我認為,只有在其他課程中,您才能這樣做[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()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM