Ламерский вопрос про обработчики...
От: Аноним  
Дата: 15.02.11 13:17
Оценка:
Нужно ли при освобождении объекта отвязывать обработчики?

В данном примере, нужно ли при финализации Test отвязывать MyEvent?

public class Test {
  public Test(SomePersistObject obj) {
    obj.SomeEvent += MyEvent;
  }

  private void MyEvent(object sender, EventArgs e) {
  }
  ...
}
Re: Ламерский вопрос про обработчики...
От: adontz Грузия http://adontz.wordpress.com/
Дата: 15.02.11 13:20
Оценка:
Здравствуйте, Аноним, Вы писали:

А>В данном примере, нужно ли при финализации Test отвязывать MyEvent?


У вас до незаивисимой финалиации дело вообще не дойдёт. Финализатор сработает только после сборки SomePersistObject.
A journey of a thousand miles must begin with a single step © Lau Tsu
Re[2]: Ламерский вопрос про обработчики...
От: Аноним  
Дата: 15.02.11 13:26
Оценка:
Здравствуйте, adontz, Вы писали:

A>Здравствуйте, Аноним, Вы писали:


А>>В данном примере, нужно ли при финализации Test отвязывать MyEvent?


A>У вас до незаивисимой финалиации дело вообще не дойдёт. Финализатор сработает только после сборки SomePersistObject.


Точно! туплю... =))
Re: Ламерский вопрос про обработчики...
От: Sinix  
Дата: 15.02.11 13:31
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Нужно ли при освобождении объекта отвязывать обработчики?


А>В данном примере, нужно ли при финализации Test отвязывать MyEvent?

public class Test
{
  public Test(SomePersistObject obj)
  {
    obj.SomeEventList.Add(this);
  }
}

надо ли удалять класс Test из списка, чтобы его собрал GC?

Коротко:
1. Прочитать Рихтера
2. До прочтения — не лезть в дебри и не связываться с финализацией.
3. Если время жизни SomePersistObject _гарантированно_ не превышает время жизни Test — отписываться (например, в Dispose) не надо.

Удачи!
Re: Ламерский вопрос про обработчики...
От: Lloyd Россия  
Дата: 15.02.11 13:34
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Нужно ли при освобождении объекта отвязывать обработчики?


А>В данном примере, нужно ли при финализации Test отвязывать MyEvent?


Этого делать не рекомендуется. К ссылочным объектам в финализаторе лучше не обращаться, для них уже тоже может сработать финализатор и они будут в невалидном состоянии.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.