gpt4 book ai didi

c# - MemberwiseClone() 和在 C# 中分配引用类型有什么区别?

转载 作者:行者123 更新时间:2023-11-30 19:36:59 28 4
gpt4 key购买 nike

如果我有这样的代码

class Student
{
public string RollID { get; set; }
}
class Person
{
public Student student { get; set; }
public string Address { get; set; }
public string Name { get; set; }
public Person Clone()
{
return (Person)this.MemberwiseClone();
}
}
class Client
{

static void Main()
{
Student s1 = new Student();
s1.RollID = "151";
Person p1 = new Person();
p1.Address = "bombay";
p1.Name = "foo";
p1.student = s1;

Person p2 = p1.Clone();
p2.student.RollID = "1558";

Person p3 = p1;
p3.student.RollID = "454";
}
}

当我更改 p2 的值时,它也会更改 p1 的值,而当我更改对象 p3 的值时,我得到相同的结果。我的问题是,如果两个逻辑做同样的事情,那么分配和使用 MemberwiseClone() 方法之间的真正区别是什么。如果我使用 MemberwiseClone() 方法还有其他优势吗?

最佳答案

这里的问题是您正在浅拷贝上进行“深”更新。如果您更改了 p2.Address,则不会影响 p1.Address;但是如果你改变 p3.Address 它会改变影响 p1.Address。

但由于 p1 和 p2 共享对单个 Student 的引用,因此更改 RollId 会影响到每个人。

Variable P1 ---->  <PERSON OBJECT 1>
| .Address = 123 Elm St.
Variable P3 ----> |
| .Student ----> <STUDENT OBJECT 1>
|_______________ |
| .RollId // one value for all
Variable P2 ----> <PERSON OBJECT 2> |
| .Address = ... |
| .Student ----> |_________________
|_______________

关于c# - MemberwiseClone() 和在 C# 中分配引用类型有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40488150/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com