【发布时间】:2014-01-07 04:19:02
【问题描述】:
令人惊讶的是,String.Clone() 不会像String.Copy() 那样返回字符串的副本。相反,它返回原始字符串'this'。
我想了解 .Net Framework 团队为何选择这种方式。
根据MSDN:
ICloneable 接口 [...] 要求您实现 Clone 方法返回当前对象实例的副本。
String.Clone() 显然没有遵循这个准则。
我知道字符串是不可变的,但如果不可变是这里的原因,String.Copy() 也会返回 this 但它不会。
当然,这是一个相当理论的问题。
【问题讨论】:
-
由于字符串是不可变的并且是固定的,因此 string.clone 和 string.copy 之间没有区别,因为它们与您的问题有关。
-
这个问题似乎跑题了,因为它不是关于编程的实践问题,而是一个学术问题。
-
通过询问“我应该如何在我的自定义不可变类型上实现
ICloneable?”,这很容易变成一个实际问题。 -
@hvd 这将使其主要基于意见,并且还可能需要讨论细节;您需要深拷贝是否有令人信服的理由,浅拷贝是否足以满足您的目的,您首先实施
ICloneable的原因是什么? -
@hvd 规范是否应将其定义为深/浅复制是一种意见,这就是您提出的将问题更改为的意见。就目前而言,这个问题不是基于意见,而是出于完全不同的原因而偏离主题。
标签: c# .net string icloneable