我确定如果我覆盖了Equals方法,我需要同时覆盖GetHashCode方法,以确保字典等数据结构按预期工作。
但是,如果我只想覆盖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。
ToString只是你的对象的字符串表示形式,没有其他作用。
正如你所说,如果你要重写Equals,最好也重写HashTables的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
}
}
但它与其他方法无关,您可以选择要覆盖的内容