【发布时间】:2017-07-21 14:57:14
【问题描述】:
我正在尝试使用其构造函数创建对象的副本,但是当我修改副本的某些内容时,原始对象也被修改了。如果您能帮助我,我将不胜感激,这是我的代码:
public class XMLStructure
{
public XMLStructure(XMLStructure xmlCopy )
{
this.Action = xmlCopy.Action;
this.Name = xmlCopy.Name;
}
public String Name { get; set; }
public ActionXML Action { get; set; }
}
【问题讨论】:
-
确实是复制了字符串,但
ActionXML仍会引用原始字符串 -
That 不是重复的Servy
-
@servy:这个问题的主题是:为什么这个复制构造函数不能按预期工作?答:因为是半成品。相关问题的问题是:如果我将副本传递给更改它的方法,为什么我的原始实例会更改?答:因为它根本不是副本,而是相同的参考。
-
这里有很多关于需要克隆 Action 属性的建议,但没有人建议对 name 属性使用 String.Copy() 以确保新克隆对象的 Name 属性是真正独立的字符串的副本。由于不可变的 .Net 字符串,我很欣赏这是一个边缘情况,但我觉得提到 String.Copy() 会增加讨论。