ToString()方法是否违反了SRP?

时间:2013-05-03 15:30:46

标签: c# java oop solid-principles single-responsibility-principle

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

1 个答案:

答案 0 :(得分:10)

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

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