我很困惑地发现是否要复制某个对象,或者在将对象与其他一些对象等同时保留该对象的引用。
实施例
int i =5;
int j = i;
参考或复制数据?
DataSet ds = dsOtherDataSet.Copy();
参考或复制数据?
DataView dvTemp = dsTestDataSet.Copy().DefaultView;
这里发生了什么?
此致
NLV
答案 0 :(得分:2)
int i = 5;
int j = i;
作为int的数据副本是值类型并存储在堆栈中。
DataSet ds = dsOtherDataSet.Copy();
根据文档,Copy方法复制DataSet的结构和数据。因此ds将具有与原始结构相同的结构,但如果存储在两者内的参考值将指向相同的存储器位置。
DataView dvTemp = dsTestDataSet.Copy().DefaultView;
仅复制引用,因为DataView
是引用类型。
答案 1 :(得分:1)
如果type为struct
,则复制始终按值完成。 if class
然后通过引用。
在Copy
,Clone
等方法中所做的工作并没有严格定义,而是取决于实现它们的方法。
对于DataSet.Copy msdn告诉我们已完成深层复制(“复制此DataSet的结构和数据。”),这意味着它完全重新创建数据集。仍然,Copy方法返回对新数据集的引用。
答案 2 :(得分:1)
在第一种情况下,int不是对象,它们是值类型。因此,对于“int j = i”,创建另一个int,然后将i中的值复制到其中。如果您使用复制,那么它可能使用深层复制创建该对象的另一个副本。但你应该发现副本是deep-copy or just a shallow copy。如果你使用DataSet ds = dsOtherDataSet,或者对象obj = someOtherObject,那么只传递它们的地址,所以它仅供参考。