3

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

这里的问题是:如果我创建一个名为的类的两个新实例,Person一个实例P和另一个Q(谁在乎我为什么叫它Q)并设置P.Name"James",然后设置Q.Name"Suzie",将P.Name设置为"Suzie"?还是我没有正确理解这一点?

谢谢大家

感谢大家帮助我解决这个问题。我认为向我解释的情况就是这样。但是我看的教程里的解释不是很清楚,而且我已经几个月没有电脑了,所以我自己测试了一下。

Ps 我选择了我清楚的第一个正确答案。但注意到了几个。再次感谢大家的帮助。

4

5 回答 5

5

简短的回答是否定的,更改 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 Name 现在都是“Suzie”。

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

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

我认为这更容易阅读。

于 2013-01-30T04:12:36.467 回答
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"
于 2013-01-30T04:14:27.870 回答
3

不,这不是,因为它们都是P 和 QPerson的不同实例。对象或实例都定义在不同的内存位置。看这个教程

于 2013-01-30T04:20:36.207 回答
2

如果创建两个实例?不,它们将是 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都引用了同一个对象。

于 2013-01-30T04:15:04.573 回答
1

这绝对不会将 P.Name 更改为 Suzie,因为您创建了同一个类的两个实例,这意味着您在堆上为这两个实例分配了两个不同的内存位置。

于 2013-01-30T04:15:03.260 回答