В C # я взял за привычку очищать каждую подписку на свои пользовательские события в Dispose()
, чтобы избежать утечек памяти подписчиков, забывших отказаться от подписки на мои события.
Это было очень просто сделать, просто вызвав MyEvent = null
, поскольку компилятор C # автоматически генерирует поле делегата. К сожалению, в VB.NET, кажется, нет простого способа сделать это. Единственное решение, которое я придумал, - написать Custom Event
, добавив пользовательские обработчики добавления и удаления, вызывающие Delegate.Combine
/ Delegate.Remove
, в основном то, что делает компилятор C #. Но необходимость делать это для каждого события просто для того, чтобы иметь возможность очистить подписки, кажется мне немного «излишней».
У кого-нибудь есть другая идея, чтобы решить эту проблему? Благодаря.