作者s4300026 (s4300026)
看板C_Sharp
标题Re: [问题] 阵列复制问题List<class>
时间Thu Nov 12 20:46:10 2020
假设你有一群学生要复制
每个学生有一堆考试成绩 和 一个班导师
把学生复制出来时, 依你的需求, 里面的考试成绩 class 要 new 一份 (DeepClone)
***** 但其他的class, 如 班导师 class 要怎麽处理呢? *****
像是班导师就应该复制参考(MemberwiseClone / ShallowClone), 因为当老师改名时,
你会希望你新复制出来的学生的老师名字要一起改.
因此我的想法是, 你就乖乖为每个你自己定义的class写下Clone方法
你可以继承 ICloneable, 这样就不会出现相同方法, 不同方法名的问题
如:
PartialClone(); Clone(); clone(); MyClone();......
-------------------
class Teacher
{
String name;
}
class Exam
{
public:
String exam_type;
int total_score;
List<int> sub_score;
Exam Clone()
{
Exam obj = new Exam();
obj.exam_type = exam_type;
obj.total_score = total_score;
obj.sub_score = new List<int>();
foreach(int item in sub_score)
{
obj.sub_score.Add(item);
}
}
}
class Student
{
public:
String name;
Teacher teacher_ref;
List<Exam> terms_exams;
Student Clone()
{
Student obj = new Student();
obj.name = name;
obj.teacher_ref = teacher_ref;
obj.terms_exams = new List<Exam>();
foreach(Exam item in terms_exams)
{
obj.terms_exams.Add(item.Clone());
}
}
}
List<Student> students_lst;
List<Student> students_lst_2;
foreach(Student item in students_lst)
{
students_lst_2.Add(item.Clone());
}
********************************
如果你问我的作法, 我会把我的物件继承 Object,
因为他有撰写 Object.MemberwiseClone 方法
先用该方法把所有内容进行 浅层复制, 即 "值用值复制, 参考用参考复制"
然後再针对需要 深层复制 的地方做额外撰写.
Student Clone()
{
Student obj = this.MemberwiseClone() as Student;
obj.terms_exams = new List<Exam>();
foreach(Exam item in terms_exams)
{
obj.terms_exams.Add(item.Clone());
}
}
以上是我的想法啦..
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 42.73.222.21 (台湾)
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/C_Sharp/M.1605185172.A.77D.html
※ 编辑: s4300026 (42.73.222.21 台湾), 11/12/2020 20:49:04
1F:→ s4300026: 如果你想要全部都是深层复制,我听说 serialize11/12 20:54
2F:→ s4300026: 可以达成该目的11/12 20:54
※ 编辑: s4300026 (42.73.222.21 台湾), 11/12/2020 20:56:03
3F:推 WayneHong: 谢谢~目前这个方法好像正是我需要的 11/17 12:23