C#如何将模板对象数据复制到新对象,但没有地址[重复]
Posted
技术标签:
【中文标题】C#如何将模板对象数据复制到新对象,但没有地址[重复]【英文标题】:C# how to copy templet object data to a new object , but no the address [duplicate] 【发布时间】:2013-12-02 03:56:06 【问题描述】:我基本上想定义一个模板数据对象, 并使用这个模板数据对象来分配新的数据对象。 然后将不同的值赋给新的数据对象。
代码如下:
public class sData
public string name;
public int Number;
public sData(string name,int Number)
this.poster_path = path;
this.Number = Number;
sData templet= new sData("aaaa","0");
sData realData1 = new sData();
realData1=templet;
realData1.Number=100;
但在realData1.Number=100;
之后
我发现templet.Number
改为100
我怎样才能把100
给realData1
,而不给templet
?
【问题讨论】:
【参考方案1】:我是否正确地说您想设置一些工厂对象,该对象将创建具有预定义值集的数据对象(即模板)?
您上面的代码不会这样做。您只创建了一个对象,但对它有两个不同的引用。
也许这样的事情会满足你的需要:
public class sData
public string name;
public int Number;
public sData(string name,int Number)
this.poster_path = path; //copied from question, this might need updating.
this.Number = Number;
sData CreateCopy()
return new sData(name, number);
sData template = new sData("aaaa","0");
sData realData1 = template.CreateCopy();
realData1.Number=100;
这仍然感觉不是很优雅,也许工厂和数据对象的单独类会更合适,但如果没有更多上下文就很难说。
【讨论】:
我知道这样,但是大类是由 EF 生成的,不应该编辑。到目前为止,我只是将所有列复制到每个新对象....【参考方案2】:您将templet
的对象变量分配给realData1
,这样您仍然在内存中引用同一个对象:
realData1=templet;
您可以分配值而不是对象本身:
realData1.name = templet.name;
realData1.Number = templet.Number;
【讨论】:
【参考方案3】:类是引用类型,类sDatarealData1和templet的引用变量指向堆中相同的内存位置,所以templet 被值 realData1 覆盖。
【讨论】:
以上是关于C#如何将模板对象数据复制到新对象,但没有地址[重复]的主要内容,如果未能解决你的问题,请参考以下文章