当前位置: 代码迷 >> C# >> 求C#大神,打开一个窗体,传过去一个对象,批改该对象数据后传过来的对象为什么数据也跟着修改
  详细解决方案

求C#大神,打开一个窗体,传过去一个对象,批改该对象数据后传过来的对象为什么数据也跟着修改

热度:16   发布时间:2016-05-05 04:06:04.0
求C#大神,打开一个窗体,传过去一个对象,修改该对象数据后传过来的对象为什么数据也跟着修改?
如标题,自己写了一个查询数据窗体,双击某一行显示该行的详细信息,传过去一个对象DrugDictEntity,名称为DrugDict,修改窗体后的数据之后,保存赋值到对象DrugDictEntity  dic 变量中,发现之前传过来的对象DrugDictEntity  DrugDict 的数据也跟着修改,也就是DrugDict 和 dic中的数据完全一样,不知道什么原因,还是就这种机制?

ps:想做一个日志,就是保存修改数据之前的老数据和修改完数据之后的新数据
------解决思路----------------------
就是这种机制,如果不想这样跟着改,应该考虑不用对象传递!
------解决思路----------------------
引用:
如标题,自己写了一个查询数据窗体,双击某一行显示该行的详细信息,传过去一个对象DrugDictEntity,名称为DrugDict,修改窗体后的数据之后,保存赋值到对象DrugDictEntity  dic 变量中,发现之前传过来的对象DrugDictEntity  DrugDict 的数据也跟着修改,也就是DrugDict 和 dic中的数据完全一样,不知道什么原因,还是就这种机制?

ps:想做一个日志,就是保存修改数据之前的老数据和修改完数据之后的新数据

对象是引用类型,dic和你传过去的对象指向同一块地址,修改是对同一块地址修改。
可以维护两个DrugDictEntity变量,作为对比生成修改日志。
------解决思路----------------------
那就用定义两个全局变量 一个用来传递新数据库 一个用来传递老的数据
------解决思路----------------------
引用:
Quote: 引用:

Quote: 引用:

如标题,自己写了一个查询数据窗体,双击某一行显示该行的详细信息,传过去一个对象DrugDictEntity,名称为DrugDict,修改窗体后的数据之后,保存赋值到对象DrugDictEntity  dic 变量中,发现之前传过来的对象DrugDictEntity  DrugDict 的数据也跟着修改,也就是DrugDict 和 dic中的数据完全一样,不知道什么原因,还是就这种机制?

ps:想做一个日志,就是保存修改数据之前的老数据和修改完数据之后的新数据

对象是引用类型,dic和你传过去的对象指向同一块地址,修改是对同一块地址修改。
可以维护两个DrugDictEntity变量,作为对比生成修改日志。



那我应该怎么赋值呢?不能直接==赋值吧,也不能直接属性与属性之间赋值吧,这样太麻烦了,有没有一个简单的方法

1、接收DrugDictEntity的窗体,深度拷贝该对象
2、使用变量接收DrugDictEntity的属性
------解决思路----------------------
在实体类里实现个Copy或Clone函数,需要赋值的时候调用呗

如果你只需要赋值一次,而不是到处赋值,直接属性对属性也可以.

自定义实体类只能属性赋值给属性,你得自己实现深拷贝
------解决思路----------------------
赋值的时候只能是基本类型的赋值给基本类型的,如果是引用类型的肯定就不行了。如果里面还有引用类型的话,就还需要进一步把里面的值也给克隆一下。

int ID = 0;
TestClass testClass = new TestClass();

Public void Clone(DrugDictEntity oldData)
{
    DrugDictEntity obj = new DrugDictEntity();
    obj.ID = this.ID;
    // 在TestClass里面也做一个Clone()方法,类似这个。
    obj.testClass = this.testClass.Clone();
}
  相关解决方案