还是窗口传值 AFrom窗体和BForm窗体和Info类
public Info
{
public string Name{get;set;}
}BForm构造函数
private Info binfo;
public BForm(Info _info){this.binfo=_info;this.binfo="YYYY";}然后就是AForm按钮打开BForm窗口
private void button1_Click(object sender, EventArgs e)
{
Info info=new Info();
info.Name="XXX";
BForm bform=new BForm(info);
bform.ShowDialog();
MessageBox.Show(info.Name);
}
打开bform之后,我发现在bform中改变binfo之后,AForm窗口中的info也随之改变了,这是怎么回事?为什么info也变成了YYYY?有什么办法info.Name不会被BForm改变?
改成 public struct Info
有点急,掉了一个Class public class Info
{
public string Name{get;set;}
}
我试过这样,但是还是相同结果private void button1_Click(object sender, EventArgs e)
{
Info info=new Info();
info.Name="XXX"; Info info2=info;
BForm bform=new BForm(info2);
bform.ShowDialog();
MessageBox.Show(info.Name);
} 结果还是显示YYYY
一定要改成 struct ?
最简单的方法而已。
这里还是同一个对象啊先了解一下值类型(struct)和引用类型(class)的区别吧
浅拷贝使用Object类MemberwiseClone实现
MemberwiseClone:创建当前 Object 的浅表副本
浅拷贝(shallow copy)对于引用类型对象中的值类型字段进行了逐位复制。赋值运算符只是把源对象的引用赋值给目的对象,两者引用同一个对象。
浅拷贝后的对象的值类型字段更改不会反映到源对象,而赋值运算后的对象的值类型字段更改会反映到源对象
我Clone就行了BForm bform=new BForm((Info)info.Clone());谢谢