ToString()
覆盖的约定是什么?有问题的类既有Name
属性,也有Id
.
7 回答
做你需要做的。本身没有约定,就像在覆盖类似的东西时那样.Equals()
and .GetHashCode()
。
如果您想在执行期间中断时影响调试器中显示的内容,请不要使用ToString()
-use DebuggerDisplayAttribute
。
您可以参考以下链接
覆盖 System.Object.ToString() 并实现 IFormattable
我的经验法则
- 它应该与Equals和GetHashCode同步
- 它应该与 Parse 方法同步(如果我提供)
- 如果需要自定义格式,请使用 IFormattable
我不知道任何约定。我通常打印在文本上下文中看起来合适的内容。Id
可能和可能不适合您的上下文。
我的经验法则是ToString
应该显示两个对象是否Equals
存在。
据我所知, forToString()
的约定与 objectGetHashCode
和Equals
.
也就是说,当Equals
返回true时,则应该生成相同的哈希码GetHashCode
。除此之外,我想说当Equals
返回 true 时,ToString
应该返回相同的字符串。
我认为实施ToString()
应该牢记三点:
- 字符串表示应该是人类可读的,例如,您可以将其用于日志/控制台输出或例如在DebuggerDisplay属性中。
- 如果您
Parse
的类中有任何方法,它应该能够解析ToString
调用的结果。此外myInstance.Equals(MyClass.Parse(myInstance.ToString()))
应该评估为true
- 如果两个实例相等,它们的字符串表示也应该相等。
您应该为整个应用程序中的所有 ToString 方法使用统一且可重用的解决方案。手动编写通用 ToStringHelper 代码或使用外部库,例如 stateprinter 项目https://github.com/kbilsted/StatePrinter项目
这里有一些指导:
http://msdn.microsoft.com/en-us/library/ms173154(v=vs.80).aspx
我认为这很大程度上取决于该类的用途。例如,如果它是面向显示的,那么返回需要与可能最终看到它的用户相关。