我正在尝试克隆对象。 “更新学生分数”表单应创建当前学生对象的副本,然后将更改应用于副本。这样,仅当用户单击“确定”按钮时,更改才会保存到当前学生。要创建克隆,Student类将需要实现ICloneable接口,而Clone方法将需要实现深层副本。到目前为止,我已经了解到,当您需要原始文件中包含的其他对象的副本(而不是指向这些对象在原始文件中的位置的指针)的副本时,您需要某物的深层副本,以便在对以下内容进行更改时这些复制的属性,不会影响原始对象。我正在努力的是将其应用于我的模型。我不确定如何应用更改,以便仅在单击确定时才发生更改。以下是我要克隆的学生班级,并更新了学生表格。如果有帮助,我还附上了源代码。谢谢!
Student.cs
public class Student : ICloneable
{
public List<int> Scores = new List<int>();
public string Name
{ get; set; }
public object Clone()
{
return Name.Clone();
}
frmUpdateStudent.cs
public partial class frmUpdateStudent : Form
{
private Form1 parentForm; //main form
private Student studentToEdit; //student list
private int index; //index
public frmUpdateStudent(Form1 parentForm, int index) //update parent form (Form1) with the new student and scores
{
this.parentForm = parentForm;
this.index = index;
studentToEdit = this.parentForm.GetStudent(index);
InitializeComponent();
StudentName.Text = studentToEdit.Name;
UpdateScoreDisplay();
}
private void UpdateButton_Click_1(object sender, EventArgs e) //open update form for current student
{
Student Form1 = new Student();
Form1.Name = StudentName.Text;
parentForm.UpdateStudent(index, Form1);
Close();
}