参考类型。我能正确理解吗?

时间:2013-01-30 04:09:04

标签: c#

这令人尴尬。我很久以前就学过C#,现在正试图理解关于类的这个问题(因为它们当然是引用类型)。

这是一个问题:如果我创建了一个名为Person的类的两个新实例,并命名了一个实例P而另一个Q(谁在乎我为什么称之为Q { 1}})并将P.Name设置为"James",然后将Q.Name设置为"Suzie",将P.Name设置为"Suzie"?或者我没有正确理解这一点?

谢谢大家

感谢大家帮助我。我假设向我解释的是这种情况。但是我读到的教程中的解释并不清楚,我在几个月内没有使用过计算机,以便自己测试一下。

P.s我选择了第一个正确的答案,这对我来说很清楚。但注意到几个。再次感谢大家的帮助。

5 个答案:

答案 0 :(得分:5)

简答为NO,改变Q.Name不会影响P.Name。如在

 var p = new Person();
 var q = new Person();
 p.Name = "James";
 q.Name = "Suzie";

但是,如果q指向p实例,那么改变q也会改变p。如:

 var p = new Person();
 var q = p;
 p.Name = "James";
 q.Name = "Suzie";

q和q名称现在都是“Suzie”。

使用数据初始化程序,您可以将第一个示例编写为:

var p = new Person { Name = "James" };
var q = new Person { Name = "Suzie" };

我认为更容易阅读。

答案 1 :(得分:3)

示例:

// p and q are separate in the below example..

Person p = new Person();
Person q = new Person();

p.Name = "James";
q.Name = "Suzie";

Console.WriteLine(p.Name); // "James"
Console.WriteLine(q.Name); // "Suzie"

// both p and q refer to the same object, so both are "Suzie" in the below example
Person p = new Person();
Person q = p;

p.Name = "James";
q.Name = "Suzie";

Console.WriteLine(p.Name); // "Suzie"
Console.WriteLine(q.Name); // "Suzie"

答案 2 :(得分:3)

不,这不是,因为 P P 实例。对象或实例都定义在不同的memoery位置。请参阅此tutorial

答案 3 :(得分:2)

如果您创建两个实例?不,它们将是两个独立的对象。

Person person1 = new Person();
person1.Name = "James";
Person person2 = new Person();
person2.Name = "Suzie";
Console.WriteLine(person1.Name);
Console.WriteLine(person2.Name);

这将打印出James然后打印Suzie,因为它们是2个不同的对象。但是,如果你这样做了:

Person person1 = new Person();
person1.Name = "James";
Person person2 = person1;
person2.Name = "Suzie";
Console.WriteLine(person1.Name);
Console.WriteLine(person2.Name);

这将打印SuzieSuzie。这是因为person1person2都引用了同一个对象。

答案 4 :(得分:1)

这肯定不会将P.Name更改为Suzie,因为您创建了同一个类的两个实例,这意味着您已为这两个实例分配了两个不同的内存位置。< / p>