我确信如果我重写Equals,我还需要覆盖GetHashCode,以确保Dictionary等..数据结构按预期工作。
但是如果我只想重写ToString,我还是要重写Equals和GetHashCode方法。
答案 0 :(得分:8)
覆盖这三种方法有三个不同的目的:
如您所见,2和3是相关的,但1是分开的。除非你实现Equals以简单地测试两个对象的ToString是否相等,这很可能是一个错误。 :)
因此,已经给出了简短的答案:您可以覆盖ToString而不会覆盖其他两个方法。甚至重载ToString方法也很正常。有关示例,请参阅DateTime:http://msdn.microsoft.com/en-us/library/zdtaw1bw.aspx
答案 1 :(得分:1)
不,您不必覆盖Equals
和GetHashCode
,它们与ToString
答案 2 :(得分:0)
如果仅重写ToString()
,则不需要重写Equals和GetHashCode答案 3 :(得分:0)
你可以只为某个类覆盖它,或者你的意思是在每个类/对象上覆盖它?
public class YourClass
{
// Other stuff here...
public override string ToString()
{
// Do whatever you want here instead, or return base.ToString(); for the default behavior
}
}
但不,它与其他方法无关,您可以选择要覆盖的内容
答案 4 :(得分:0)
ToString仅用于表示对象的字符串表示形式。没什么。
正如您所说,如果您要覆盖Equals,最佳做法是覆盖HashTables的GetHashCode。但是这两个操作是无关的。