Допустим, мы имеем следующую модель:Удаление обработки событий в деструкторов в случае как издатель и подписчик держать ссылки на друг друга
public class Bar<T>:List<T>
{
public delegate void CollectionChangedDelegate();
public event CollectionChangedDelegate CollectionChanged;
}
public class Foo
{
Bar<object> MyCollection = new Bar<object>();
public Foo()
{
MyCollection.CollectionChanged += new Bar<object>.CollectionChangedDelegate(MyCollection_CollectionChanged);
}
public void MyCollection_CollectionChanged()
{
//Do Something
}
~Foo() //Would this work ?
{
MyCollection.CollectionChanged -= MyCollection_CollectionChanged;
}
}
Может деструктор класса Foo
называться в этом случае?
Вы не должны использовать деструкторов, используйте IDisposable интерфейс вместо. Ответьте на свой вопрос: если ни один другой живой объект не имеет ссылки на класс Foo, они будут собраны, см. Http://stackoverflow.com/questions/2775520/c-sharp-garbage-collector-cross-reference –