【发布时间】:2011-01-02 08:55:44
【问题描述】:
我有一个 Vector 类,我正在测试以下单元测试(使用 nUnit)。
1 Vector test1 = new Vector(new double[] { 6, 3, 4, 5 });
2 Vector test2 = test1;
3 Assert.AreEqual(test1, test2, "Reference test");
4 test2 = new Vector(new double[] { 3, 3, 4, 5 });
5 Assert.AreEqual(test1, test2, "Reference test");
第 3 行的第一个测试通过,但第 5 行的第二个测试失败。既然我在第 2 行做了赋值语句,那么 test2 不应该也指向与 test1 相同的内存吗?我的 Vector 被定义为一个类,所以它是一个引用类型。另一方面,以下测试通过:
1 Vector test1 = new Vector(new double[] { 6, 3, 4, 5 });
2 Vector test2 = test1;
3 Assert.AreEqual(test1, test2, "Reference test");
4 test2[1] = 4;
5 Assert.AreEqual(test1, test2, "Reference test");
这是否意味着,当我使用 new 运算符定义新对象时,旧的赋值不再有效?任何其他(或正确的 - 如果我错了)解释?
【问题讨论】:
-
这种行为差异是命令式编程与反应式编程
-
Michael Greene:不,这是引用和值之间的区别,以及“=”运算符的实现方式。
-
哇!!这很快 - 感谢所有的答案。
标签: c# .net variable-assignment reference-type