如何防止对象传递给另一种形式?

问题描述 投票:0回答:1

我正在使用ObjectListView,并且我要添加到其中的对象是我为此创建的自定义Class

我的Class包含进行计算的信息。我想允许用户能够编辑他们已经进行的计算。

我尝试使用以下不同的代码从ObjectListView中拉出对象:

Customer customer = (Customer)listCustomers.SelectedItem.RowObject;

Customer customer = (Customer)listCustomers.GetSelectedObject();

Customer customer = (Customer)listCustomers.SelectedObject;

所有这些方法都导致customer成为该对象。不过,我面临的问题是,如果我更改该类的任何值,例如以下代码,它将反映ObjectListView中该对象的更改:

customer.TotalValue += 50;

即使我以其他形式运行这些计算,也可以通过以下方式传输该信息:

EditCustomer editForm = new EditCustomer(customer)
editForm.Show();

它仍然会更改ObjectListView中的对象。

我想知道的是,如何在不更改customer中的对象的情况下提取该对象,并允许我编辑ObjectListView对象?

c# winforms listview objectlistview
1个回答
0
投票

您的客户变量是对存储在ObjectListView中的对象的引用,因此,当您修改客户时,更改将反映在其所引用的基础对象中。当您将客户传递给其他表单时,您正在传递引用,仍然指向相同的基础对象,因此可以通过该引用修改该对象,甚至可以使用其他表单。

要获得所需的行为,您需要克隆对象,对其进行完全独立的复制,然后对副本进行更改不会影响原始对象。

Check here有关克隆对象的信息。

© www.soinside.com 2019 - 2024. All rights reserved.