如何防止对象传递给另一种形式?
How can I keep object from passing to another form?
我正在使用 ObjectListView
,我添加到其中的对象是我为其构建的自定义 Class
。
我的 Class
包含用于计算的信息。我想让用户能够编辑他们已经进行的计算。
我尝试使用以下不同的代码从 ObjectListView
中提取对象:
Customer customer = (Customer)listCustomers.SelectedItem.RowObject;
Customer customer = (Customer)listCustomers.GetSelectedObject();
Customer customer = (Customer)listCustomers.SelectedObject;
所有这些方法都会导致 customer
成为该对象。不过,我面临的问题是,如果我更改 class 的任何值,例如以下代码,它会反映 ObjectListView 中该对象的更改:
customer.TotalValue += 50;
即使我 运行 在另一种形式上进行这些计算,通过以下方式传输该信息:
EditCustomer editForm = new EditCustomer(customer)
editForm.Show();
它仍然更改 ObjectListView 中的对象。
我想知道的是,如何提取该对象,并允许我编辑 customer
对象,同时不更改 ObjectListView
中的对象?
您的客户变量是对存储在您的 ObjectListView 中的对象的引用,因此当您修改客户时,更改会反映在它所引用的基础对象中。当您将 customer 传递给不同的表单时,您传递的是引用,它仍然指向相同的底层对象,因此即使来自不同的表单,也可以通过该引用修改该对象。
要获得所需的行为,您需要克隆对象,制作一个完全独立的副本,然后对副本进行更改不会影响原始对象。
Check here 获取有关克隆对象的信息。
我正在使用 ObjectListView
,我添加到其中的对象是我为其构建的自定义 Class
。
我的 Class
包含用于计算的信息。我想让用户能够编辑他们已经进行的计算。
我尝试使用以下不同的代码从 ObjectListView
中提取对象:
Customer customer = (Customer)listCustomers.SelectedItem.RowObject;
Customer customer = (Customer)listCustomers.GetSelectedObject();
Customer customer = (Customer)listCustomers.SelectedObject;
所有这些方法都会导致 customer
成为该对象。不过,我面临的问题是,如果我更改 class 的任何值,例如以下代码,它会反映 ObjectListView 中该对象的更改:
customer.TotalValue += 50;
即使我 运行 在另一种形式上进行这些计算,通过以下方式传输该信息:
EditCustomer editForm = new EditCustomer(customer)
editForm.Show();
它仍然更改 ObjectListView 中的对象。
我想知道的是,如何提取该对象,并允许我编辑 customer
对象,同时不更改 ObjectListView
中的对象?
您的客户变量是对存储在您的 ObjectListView 中的对象的引用,因此当您修改客户时,更改会反映在它所引用的基础对象中。当您将 customer 传递给不同的表单时,您传递的是引用,它仍然指向相同的底层对象,因此即使来自不同的表单,也可以通过该引用修改该对象。
要获得所需的行为,您需要克隆对象,制作一个完全独立的副本,然后对副本进行更改不会影响原始对象。
Check here 获取有关克隆对象的信息。