这令人尴尬。我很久以前就学过C#,现在正试图理解关于类的这个问题(因为它们当然是引用类型)。
这是一个问题:如果我创建了一个名为Person
的类的两个新实例,并命名了一个实例P
而另一个Q
(谁在乎我为什么称之为Q
{ 1}})并将P.Name
设置为"James"
,然后将Q.Name
设置为"Suzie"
,将P.Name
设置为"Suzie"
?或者我没有正确理解这一点?
谢谢大家
感谢大家帮助我。我假设向我解释的是这种情况。但是我读到的教程中的解释并不清楚,我在几个月内没有使用过计算机,以便自己测试一下。
P.s我选择了第一个正确的答案,这对我来说很清楚。但注意到几个。再次感谢大家的帮助。
答案 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);
这将打印Suzie
和Suzie
。这是因为person1
和person2
都引用了同一个对象。
答案 4 :(得分:1)
这肯定不会将P.Name更改为Suzie,因为您创建了同一个类的两个实例,这意味着您已为这两个实例分配了两个不同的内存位置。< / p>