[英]If I override ToString, do i need to override Equals and GetHashCode as well?
我相信如果我重寫Equals,我還需要覆蓋GetHashCode,以確保Dictionary等..數據結構按預期工作。
但是,如果我只想重寫ToString,我還是必須重寫Equals和GetHashCode方法。
覆蓋這三種方法有三個不同的目的:
如您所見,2和3是相關的,但1是分開的。 除非你實現Equals以簡單地測試兩個對象的ToString是否相等,這很可能是一個錯誤。 :)
因此,已經給出了簡短的答案:您可以覆蓋ToString而不會覆蓋其他兩個方法。 甚至重載ToString方法也很正常。 有關示例,請參閱DateTime: http : //msdn.microsoft.com/en-us/library/zdtaw1bw.aspx
不,您不必重寫Equals
和GetHashCode
,它們與ToString
無關
如果只重寫ToString(),你不需要重寫Equals和GetHashCode
你可以只為某個類覆蓋它,或者你的意思是在每個類/對象上覆蓋它?
public class YourClass
{
// Other stuff here...
public override string ToString()
{
// Do whatever you want here instead, or return base.ToString(); for the default behavior
}
}
但不,它與其他方法無關,您可以選擇要覆蓋的內容
ToString僅用於表示對象的字符串表示形式。 而已。
正如您所說的,如果要覆蓋Equals,最好是為HashTables重寫GetHashCode。 但是這兩個操作是無關的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.