Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/295.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# winforms-建议的类结构和克隆(不通过引用)_C#_.net_Windows_Winforms_Visual Studio - Fatal编程技术网

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通常在克隆操作期间使用浅拷贝

为了实现深度复制,通常有两个选项

  • 序列化/反序列化(如果您的类都是可序列化的)-例如
  • 通过使用反射,例如

  • 如果将数据(模型)问题从表单(视图)中分离出来,则可以更轻松地“克隆”数据。

    对不起,我是新手-如何序列化表单?