【发布时间】:2019-05-10 11:19:27
【问题描述】:
我看过Difference between a Value Type and a Reference Type,在这篇文章中,作者是说:
因为引用类型代表变量的地址而不是数据本身,所以将引用变量分配给另一个不会复制数据。相反,它会创建引用的第二个副本,它引用与原始值相同的堆位置
基于上面的引用,我预计下面的代码会将引用变量分配给另一个变量,它不会复制数据,但它确实也在复制数据。你能帮我理解一下吗?
Class1 i1 = new Class1();
i1.Name = "Name1";
Class1 i2 = i1;
//i2.Name is "Name1"
对于i2,我希望它指的是与i1 值相同的堆位置,这是正确的,但根据文章,不应复制数据。另外,我的问题不应该被标记为重复,因为我知道值和引用类型之间的区别,我只需要澄清一下引用类型以及深拷贝/克隆/浅层的用法,如果我们可以简单地使用赋值?
【问题讨论】:
-
但它不会复制任何东西。
i1和i2都指向同一个对象 -
@Fabjan 那么为什么
i2.Name是Name1。这不是从i1复制过来的吗? -
仅仅因为有人将您的电话号码从您的名片复制到记事本中,并不意味着您突然有了一个双胞胎。你不会被复制。仅复制了对您的引用(书面电话号码)。
-
因为它指向 same 对象所以值是相同的
-
它们之间的唯一区别是引用的名称。
标签: c# oop reference-type