如何正确销毁临时对象c#

时间:2014-11-13 13:42:00

标签: c#

我需要帮助创建和销毁对象或对象的生命周期。 问题是在处理表格后临时对象没有被删除并且与对象的关系仍然存在。 我做错了什么?我需要以某种方式覆盖dispose方法或析构函数吗? 如何正确销毁临时对象?感谢。

产品形式:

private Product T = null;

public ProductForm(Customer cust)
{
    InitializeComponent();
    T = new Product();
    T.Customer = cust;
}

Public CopyProducts(List<Product> copy_from)
{
    Foreach(Product Temp1 in copy_from) 
    {
        Product Temp2 = new Product();
        Temp2.Customer = T.Customer;
        Temp2.Count = Temp1.Count;
        Temp2.Delivery =  Temp1. Delivery;
        …
        cDB.Product.InsertOnSubmit(Temp2);
        cDB.SubmitChanges();
    }
}

private void OKButton_Click(object sender, EventArgs e)
{    
    T.Count = …
    …
    cDB.Product.InsertOnSubmit(T);
    cDB.SubmitChanges();
}

private void CancelButton_Click(object sender, EventArgs e)
{
    this.Close();           
}

主要形式的测试代码:

MessageBox.Show(current_customer.Product.Count().ToString()); // ->>> 10
ProductForm prodform = new ProductForm(current_customer);
prodform.ShowDialog();
prodform.Dispose();
// ->>> after cancel button clicked should be 10 but it shouws 11
MessageBox.Show(current_customer.Product.Count().ToString()); // ->>> 11 instead of 10

MessageBox.Show(current_customer.Product.Count().ToString()); // ->>> 10
ProductForm prodform = new ProductForm(current_customer);
prodform.CopyProducts(list_of_products);
prodform.Dispose();
MessageBox.Show(current_customer.Product.Count().ToString()); // ->>> 11 instead of 10

1 个答案:

答案 0 :(得分:0)

处理表单时,这不会影响你的current_customer,因为它与它无关。处理表单时,只释放一个对实例current_customer的引用,但只要引用存在(例如在主应用程序中),实际实例就会进一步存在。因此,它仍然具有其价值。

编辑:也许您可以在增加该数量的地方显示更多代码。