C# winforms-建议的类结构和克隆(不通过引用)
我的课程有:C# winforms-建议的类结构和克隆(不通过引用),c#,.net,windows,winforms,visual-studio,C#,.net,Windows,Winforms,Visual Studio,我的课程有: Application.Run(new Form1()); 在form1课程中,我有: model = new Model(this); modelarray myArray = new modelarray(this); model = myArray.models[0]; myArray.models[1] = (Model) model.Clone(); private void btn13_Click(object sender, EventArgs e)
Application.Run(new Form1());
在form1课程中,我有:
model = new Model(this);
modelarray myArray = new modelarray(this);
model = myArray.models[0];
myArray.models[1] = (Model) model.Clone();
private void btn13_Click(object sender, EventArgs e)
{
model.btn13Clicked();
}
private void btnGetBackClone_Click(object sender, EventArgs e)
{
model = myArray.models[1];
//here I'm expecting to get the original object back (ie. with btns[7,7].Visible = True) but it doesn't work!!
}
private Button[,] btns;
public Model(Form1 form1)
{
btns = new Button[10,10];
myform = form1;
btns[8, 6] = form1.btn1;
btns[9, 5] = form1.btn2;
btns[7, 7] = form1.btn13;
}
public void btn13Clicked()
{
btns[7, 7].Visible = False;
}
public object Clone()
{
return this.MemberwiseClone();
}
public Model[] models = new Model[19];
public modelarray(Form1 form1)
{
models[0] = new Model(form1);
}
在模型类中,我有:
model = new Model(this);
modelarray myArray = new modelarray(this);
model = myArray.models[0];
myArray.models[1] = (Model) model.Clone();
private void btn13_Click(object sender, EventArgs e)
{
model.btn13Clicked();
}
private void btnGetBackClone_Click(object sender, EventArgs e)
{
model = myArray.models[1];
//here I'm expecting to get the original object back (ie. with btns[7,7].Visible = True) but it doesn't work!!
}
private Button[,] btns;
public Model(Form1 form1)
{
btns = new Button[10,10];
myform = form1;
btns[8, 6] = form1.btn1;
btns[9, 5] = form1.btn2;
btns[7, 7] = form1.btn13;
}
public void btn13Clicked()
{
btns[7, 7].Visible = False;
}
public object Clone()
{
return this.MemberwiseClone();
}
public Model[] models = new Model[19];
public modelarray(Form1 form1)
{
models[0] = new Model(form1);
}
在modelarray类中,我有:
model = new Model(this);
modelarray myArray = new modelarray(this);
model = myArray.models[0];
myArray.models[1] = (Model) model.Clone();
private void btn13_Click(object sender, EventArgs e)
{
model.btn13Clicked();
}
private void btnGetBackClone_Click(object sender, EventArgs e)
{
model = myArray.models[1];
//here I'm expecting to get the original object back (ie. with btns[7,7].Visible = True) but it doesn't work!!
}
private Button[,] btns;
public Model(Form1 form1)
{
btns = new Button[10,10];
myform = form1;
btns[8, 6] = form1.btn1;
btns[9, 5] = form1.btn2;
btns[7, 7] = form1.btn13;
}
public void btn13Clicked()
{
btns[7, 7].Visible = False;
}
public object Clone()
{
return this.MemberwiseClone();
}
public Model[] models = new Model[19];
public modelarray(Form1 form1)
{
models[0] = new Model(form1);
}
请注意我在btnGetBackClone\u Click方法下的评论。
“//在这里,我希望返回原始对象(即使用BTN[7,7].Visible=True),但它不起作用!!”
我理解这是因为模型[0]和模型[1]指向相同的内存位置(即按引用复制)。但在这种情况下,我真的不知道如何实施解决方案。搜索“深度复制”似乎没有帮助,因为序列化表单不起作用。有人能纠正我的克隆错误吗
我知道我可以简单地重做“btns[7,7].Visible=True”;但我想知道一个克隆解决方案,这样它将复制我决定放入模型中的所有未来字段
我搜索了codeproject.etc,但似乎没有任何直接的winforms介绍。.NET通常在克隆操作期间使用浅拷贝 为了实现深度复制,通常有两个选项
如果将数据(模型)问题从表单(视图)中分离出来,则可以更轻松地“克隆”数据。对不起,我是新手-如何序列化表单?