我刚刚遇到一些覆盖ToString()并返回一些关键信息(不仅仅是调试信息)的代码.此类型的用户调用ToString()并解析该关键数据.
我认为,多年来阅读各种各样的点点滴滴,就是ToString()有一个相当弱的契约,即覆盖它(如果你愿意)展示一些有意义的东西.
看到我说那里的显示器?我遇到的代码依赖于此类实例的文本表示非常具体;添加除预期之外的任何东西都会导致各种各样的问题.
所以,我的问题是,如果一个对象的文本表示是关键的,应该使用ToString()还是应该使用更明确的方法/属性,例如AsText?
解决方法
我个人也有同感.
Microsoft’s documentation声明了ToString()方法
[…] converts an object to its string representation so that it is suitable for display.
Oracle’s documentation for Java的Object.toString()甚至更强大:
The result should be a concise but informative representation that is easy for a person to read.
我认为这些强烈表明ToString()应该传达方便人类的信息.返回由应用程序的其他部分操纵的数据的方法应该具有更多信息的名称.在我看来,甚至AsText()太通用了.