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

我怎样才能把100realData1,而不给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】:

类是引用类型,类sDatarealData1templet的引用变量指向堆中相同的内存位置,所以templet 被值 realData1 覆盖。

【讨论】:

以上是关于C#如何将模板对象数据复制到新对象,但没有地址[重复]的主要内容,如果未能解决你的问题,请参考以下文章

装箱与拆箱

Excel:将工作簿复制到新工作簿

将对象作为参数传递给构造函数并将其属性复制到新对象?

将数据库从站点复制到新模板; phpmyadmin?

在 jQuery UI 中克隆可拖动对象时,如何将数据和事件传输到新元素?

如何使用 adf 重命名文件,因为它们被复制到新位置