Я немного запутался в классах С# и их деконструкторе.
Мне нужно использовать несколько обработчиков событий в экземпляре класса, который я получаю в конструкторе:
public Foo(IFooHandler handler)
{
handler.Load += Load;
handler.Close += Close;
}
Мне нужно отказаться от подписки на это событие, когда класс Foo будет уничтожен. Выполнять ли я IDisposable
и отменять подписку там или в деконструкторе? Мне нужно уничтожить эти события, я не могу сделать это по-другому.
Для одного из классов я создаю экземпляр, проверяю ход выполнения, а затем экземпляр класса выходит из области видимости. Для другого он остается в MainForm
, пока форма не будет закрыта. Во-первых, это то, о чем я беспокоюсь, потому что у него все еще есть ссылка на этот обработчик событий, а не на правильную работу.
Я не хочу утечки памяти. Когда и как я должен отказаться от подписки?