出奇,String.Clone()
不返回字符串的副本String.Copy()
会做。相反,它返回'this'
,原始字符串。
我想了解为什么.Net Framework 团队选择这样做。
As per MSDN http://msdn.microsoft.com/en-us/library/system.icloneable%28v=vs.110%29.aspx:
ICloneable 接口 [...] 要求您实现
Clone 方法返回当前对象实例的副本。
String.Clone()
显然没有遵循这个准则。
我知道字符串是不可变的,但如果不可变性是这里的原因,String.Copy()
也会回来this
但事实并非如此。
当然,这是一个相当理论化的问题。
你如何发现差异?仅通过比较两个参考文献object.ReferenceEquals
。但是通过对字符串进行任何语义操作,您都无法区分其中的差异。
通过引用比较字符串几乎总是一个错误,因为您很少可以依赖实习是否发生。
这个问题不仅适用于String
。如果你有一个不可变的Point
类,为什么你要返回一个新的对象Clone
?不需要。
IClonable
无论如何,很少被使用,也很少有用。如果您想向类的用户公开一种获取给定实例副本的方法,则无需继承IClonable
at all.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)