如何创建对象的副本?

时间:2011-03-30 11:48:21

标签: asp.net

我有一个名为post的对象,我将一个名为newPost的新变量声明为post对象,然后

  

var newPost = post

但当我修改post对象的任何属性时,newPost对象的Modified Influences属性。

如何解决这个问题?

3 个答案:

答案 0 :(得分:5)

您需要做的是许多可能的事情之一。这是一对需要考虑的事情。

  1. 实施IClonable并执行var newPost = post.Clone();
  2. 在类上有一个构造函数 另一个实例作为参数, 然后从中复制属性 实例传入新的 实例。即var newPost = new Post(post);
  3. 要注意一点,你可能会想要做对象的deep clone or deep copy,这样如果你的类有任何对象属性,那么这两个实例并没有指向同一个引用他们的财产。

答案 1 :(得分:1)

您需要提供一些克隆对象的方法。正如其他评论者所说,您只是引用同一个对象。有关详细信息,请参阅此StackOverflow问题(第一个答案)Deep cloning objects

答案 2 :(得分:0)

这是一个非常基本的问题,我不能写一本书......

但这正是应该如何运作的。您正在设置“参考”变量; newPostpost都指向完全相同的对象,即class,因此是引用类型,因此您应该预期对一个的所有更改也会影响另一个。

听起来你需要学习一本好的基础.NET编程书,并特别注意Value和Reference类型之间的差异。

'解决方案'是创建一个新对象并将旧对象的各个成员设置/复制到新对象,但是我担心在你挖掘更多内容之前,解决方案不会为你提供太久的服务。