. Я только что реализовал класс WeakEventDelegate
в .NET.
Я видел другие статьи о реализации такой вещи в http://code.logos.com/blog/2008/08/event_subscription_using_weak_references.html и http : //blogs.msdn.com/b/greg_schechter/archive/2004/05/27/143605.aspx
Однако реализация, к которой я пришел, менее сложна (хотя и менее гибка) и, похоже, выполняет свою работу. поэтому мне было интересно, что-то я пропустил.
Есть ли какие-либо проблемы со следующей реализацией, кроме ее относительной недостаточной гибкости?
public class WeakEventDelegate
where TEventArgs : EventArgs
{
private readonly WeakReference handlerReference;
public WeakEventDelegate(Action
РЕДАКТИРОВАТЬ : Моей единственной целью при написании этого класса было предотвратить неявная ссылка издателя на делегата, чтобы предотвратить сборку мусора подписчика.
Это означает, что вместо записи:
void subscribe()
{
publisher.RaiseCustomEvent += this.HandleCustomEvent;
}
я бы написал:
private readonly WeakDelegate _customHandler = new WeakDelegate(this.HandleCustomEvent);
void subscribe()
{
publisher.RaiseCustomEvent += _customHandler.Handle;
}
Основное использование - Я имею в виду, что этот класс предназначен для нескольких классов коллекций (подписчиков), время жизни которых я едва могу контролировать. (Однако один из этих случаев происходит при привязке данных WPF, поэтому он может быть идеальным кандидатом для использования рекомендованной инфраструктуры слабых событий).