有两个代码示例: #1
string str1 = "hello";
string str2 = str1; //reference to the same string
str1 = "bye"; //new string created
和#2
string str3 = "hello";
string str4 = (string)str3.Clone();//reference to the same string
str3 = "bye";//new string created
看起来他们是完全相同的不是吗?那么使用Clone()有什么好处?当我不能使用代码#1而不是代码#2时,你能给我一个例子吗?
答案 0 :(得分:24)
这很有用,因为字符串实现 ICloneable ,因此您可以为 ICloneable 项目的集合创建克隆的副本。当集合只是字符串时,这很无聊,但当集合包含多个实现 ICloneable 的类型时,它很有用。
至于复制单个字符串它没有用,因为它通过设计返回对它自己的引用。
答案 1 :(得分:21)
不直接回答您的问题,但如果您希望实际克隆字符串,可以使用静态string.Copy()方法。
答案 2 :(得分:3)
.Clone()与简单赋值相同。此外,字符串是不可变的,因此在两种情况下都会写入。
.Clone()在使用不同类型的情况下会更有用,它们实现相同的接口(在本例中为IClonable),因为您无法使用简单的赋值,但仍然可以Clone()返回给ICloneable的对象并分配该引用。例如,使用ICloneable元素迭代通用集合。