TestClass p=new Testclass();
p=value;
TestClass p=value;我运行了一些测试,它们看起来是相同的,但我想确定第二个没有“新”关键字的问题。
很抱歉有新手的问题,谢谢你的帮助。
发布于 2018-05-16 07:32:32
当你在下面
1.TestClass p=new Testclass(); //this will create new p
2. var value = new Testclass();
TestClass p=value;//this will assign already created instance to p i.e. reference assignment首先,将其全部创建为新对象,但在第二种情况下,当您赋值引用时,值和p都指向相同的实例,因此如果您确实进行了如下更改
value.property = 'abc';//it affect p
p.property = 'xyz';// it affect value这是因为两者都指向同一个对象。
发布于 2018-05-16 07:56:39
很明显,你没有做足够的测试,因为这有一个关键的区别。如果你有:
var value1 = new TestClass();
var value2 = new testClass();
value1.Foo = "Bar";
value2.Foo = "Baz";
Console.WriteLine($"Val 1: {value1.Foo}, Val 2: {value2.Foo}");您将像预期的那样得到"Val 1: Bar, Val 2: Baz",但是如果您得到了:
var value1 = new TestClass();
TestClass value2 = value1;
// ...The rest as before你得到了:"Val 1: Baz, Val 2: Baz"。
之所以发生这种情况,是因为value2实际上指向与value1相同的对象。这可以是将两个人的地址提供给某个节点上的一个真实位置,每当他们需要该地址时,他们都会引用该地址。
在编程中,这是变量的地址或引用,即存储在内存中的变量。当他们有相同的地址时,不管你做什么变量,都会影响到另一个人,就像一个人画了一个人所指的房子,另一个人会看到这些变化。
然而,为了让事情变得更棘手:
var value1 = new TestClass();
var value3 = new TestClass();
TestClass value2 = value1; // Value2 is now sharing the reference of value1
// Any changes to value2 will effect value1
value2 = null; // This does not set the value of value1 to null
value2 = value3; // This does not set the value of value1 to value3回到类比中,当我们将一个引用类型变量赋值给另一个引用类型变量时,我们会给一个人一个新的节点,上面有一个不同的地址。显然,这不会改变原来的位置,无论是在新的地点是什么。
在编程中,我们只是告诉它现在要引用什么对象。如果您确实想要value2 = null的行为使value1 null也一样,那么仍然有一种方法可以做到这一点。
https://stackoverflow.com/questions/50364761
复制相似问题