引用类型.我是否正确理解了这一点

本文关键字:这一点 正确理解 是否 引用类型 | 更新日期: 2023-09-27 17:56:48

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

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

谢谢大家

谢谢大家帮助我。我以为向我解释的是这种情况。但是我读的教程中的解释不清楚,我已经几个月没有电脑了,所以自己测试了。

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

引用类型.我是否正确理解了这一点

简短的回答是否定的,更改 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" };

我认为这更容易阅读。

示例:

// 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"

不,这不是,因为两者都是类 PersonP 和 Q 不同实例。对象或实例都定义在不同的内存位置。请参阅此教程

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

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

相关文章: