Да, если WeakReference
- единственное, что содержит ссылку на ListenerObject
, тогда ListenerObject
может быть G C 'd в любой точке.
Вы бы использовали шаблон вот так, если ваш EventWrapper
класс не единственное, что имеет ссылку на ListenerObject
, но ваш EventWrapper
не знает, когда эта другая вещь выпустит свою ссылку на ListenerObject
.
Например, ListenerObject
может быть элементом управления пользовательского интерфейса, который появляется на экране, а EventWrapper
может принадлежать одноэлементной службе. Элемент управления пользовательского интерфейса будет оставаться активным до тех пор, пока отображается этот экран, но будет освобожден, когда пользователь изменит экран. Служба может не знать, когда это произойдет. Использование шаблона слабых событий означает, что в этом случае вы случайно не получите утечку памяти.
Обратите внимание: если вы хотите реализовать шаблон слабых событий, используйте WeakEventManager
в качестве подробно описано в этой статье .