引用类型.我是否正确理解了这一点
本文关键字:这一点 正确理解 是否 引用类型 | 更新日期: 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"
不,这不是,因为两者都是类 Person 的 P 和 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);
这将打印Suzie
和Suzie
.这是因为person1
和person2
都引用同一个对象。
这
绝对不会更改对 Suzie 的 P.Name,因为您已经创建了同一类的两个实例,这意味着您在堆上为这两个实例分配了两个不同的内存位置。