3

正如标题所述,为什么任何对象都应该继承 ToString() 方法(例如在 C# 或 Java 中)并以某种方式将其转换为 String?在某些情况下,这不是违反单一责任原则吗?我的意思是,如果您的对象不需要转换为字符串,那么您最终将对您的对象承担更多责任。

4

1 回答 1

10

从某种意义上说,ToString()确实违反了单一职责原则。转换为字符串表示不一定是每种对象类型的要求。在 C# 中,GetHashCode()可以说更糟 - 并且再次在每种类型上定义。这可以很容易地通过其他一些机制来完成(即:一个可选接口,以及一个只负责将任何对象转换为字符串的类,等等)。

这是实用性与正确性的问题。在每个对象上都有一个提供字符串表示的方法(可以说)使一些事情总体上更简单,但代价是让每个对象都实现它。话虽如此,如果对象对默认实现感到满意,则不需要承担此责任。

于 2013-05-03T15:33:33.307 回答