ToString()
覆盖的约定是什么?相关课程既有Name
属性,又有Id
。
答案 0 :(得分:5)
做你需要做的事。没有任何惯例,因为有时会覆盖.Equals()
和.GetHashCode()
之类的内容。
如果要在执行期间中断时影响调试器中显示的内容,请不要使用ToString()
- 使用DebuggerDisplayAttribute
。
答案 1 :(得分:1)
我不知道任何惯例。我通常会在文本语境中打印出合适的内容。 Id
可能适用于您的上下文。
我的经验法则是,ToString
应该显示两个对象是否为Equals
。
答案 2 :(得分:1)
据我所知,ToString()
的约定与对象上的其他2个可覆盖方法的约定有内在联系 - GetHashCode
和Equals
。
也就是说当Equals
返回true时,GetHashCode
应生成相同的哈希码。为了补充一点,我想说当Equals
返回true时,ToString
应返回相同的字符串。
答案 3 :(得分:1)
我认为ToString()
的实施应该牢记三件事:
Parse
方法,则应该能够解析ToString
来电的结果。此外,myInstance.Equals(MyClass.Parse(myInstance.ToString()))
应评估为true
答案 4 :(得分:1)
您可以参考以下链接
Overriding System.Object.ToString() and Implementing IFormattable
Demystifying C# Programming's ToString Method
How To: Override the ToString Method
我的经验法则
1.它应与Equals和GetHashCode同步
2.它应与Parse方法同步(如果我提供)
3.如果需要自定义格式,请使用IFormattable
答案 5 :(得分:0)
这里有一些指导:
http://msdn.microsoft.com/en-us/library/ms173154(v=vs.80).aspx
我认为这个课程的目的是如何使用。例如,如果它以面向方式显示,那么返回需要与可能最终看到它的用户相关。
答案 6 :(得分:0)
您应该为整个应用程序中的所有ToString方法使用统一且可重用的解决方案。手动编码一般ToStringHelper或使用外部库,如stateprinter项目https://github.com/kbilsted/StatePrinter项目