[英]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.