2014-11-13 3 views
-5

Мне нужна помощь в создании и уничтожении объектов или жизненного цикла объектов. Проблема заключается в том, что после удаления формы временные объекты не стираются и отношения с объектом все еще существуют. Что я делаю неправильно? Нужно ли мне переопределить метод или деструктор? Как правильно уничтожить временный объект? Благодарю.Как правильно уничтожить временный объект C#

Форма выпуска:

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 
+3

Что это связано с Linq? – DavidG

+3

Вам не нужно его утилизировать, пусть сборщик мусора выполняет свою работу. –

+0

Но это не так. Пример кода показывает это. Почему я спрашиваю. – John4

ответ

0

Избавляясь вашу форму, это не влияет на вашу current_customer, потому что это не имеет никакого отношения к сделайте с этим. Когда вы удаляете свою форму, освобождается только одна ссылка на ваш экземпляр current_customer, но до тех пор, пока существуют ссылки (в вашем основном приложении, например), фактический экземпляр существует дальше. Поэтому он все еще имеет свою ценность.

EDIT: Возможно, вы можете показать еще какой-нибудь код, в котором вы увеличиваете этот счет.

+0

Если я добавлю T.Customer = null; в CancelButton_Click - все работает нормально после нажатия кнопки отмены. Но prodform.CopyProducts (list_of_products) все еще не работает нормально. – John4

+0

Где вы объявляете current_customer? – HimBromBeere

+0

В основной форме. Я получаю его из datacontext. Клиент = cDB.Customer.First (x => x.Custemer_id == id_selected); – John4

Смежные вопросы