为什么String.Clone()返回原始字符串而不是它的副本?

Syl*_*gue 20 .net c# string icloneable

令人惊讶的是,String.Clone()不会像返回的那样返回字符串的副本String.Copy().相反,它返回'this'原始字符串.

我想了解为什么.Net Framework团队选择这样做.

根据MSDN:

ICloneable接口[...]要求您的Clone方法实现返回当前对象实例的副本.

String.Clone() 显然不遵循本指南.

我知道字符串是不可变的,但如果不变性是这里的原因,String.Copy()也会返回,this但事实并非如此.

当然,这是一个相当理论化的问题.

usr*_*usr 5

你怎么能发现差异?只能通过比较两个引用来使用object.ReferenceEquals.但是通过对字符串的任何语义操作,你都无法区分它们.

通过引用比较字符串几乎总是一个错误,因为你很少依赖实习发生或不发生.

这个问题不仅适用于String.如果你有一个不可变Point类,为什么要从中返回一个新对象Clone?没必要.

IClonable很少使用,很少使用.如果您希望公开类的用户获取给定实例的副本,则根本不需要继承IClonable.