Форма должна отменить регистрацию всех событий от сущностей, которые переживут форму.Не имеет значения, если форма отменяет регистрацию событий от сущностей, которые имеют то же время жизни, что и форма.По какой-то причине нормальная доктрина кажется «не волнуйтесь о незарегистрированных событиях, кроме случаев, когда это важно».Я бы подумал, что было бы намного чище, чтобы все объекты, подписывающиеся на события, отписывались от них на Dispose
, но, к сожалению, ни vb.net, ни C # не предоставляют даже хотя бы удаленно чистых способов сделать это.С зависимостями, которые реализуют IDisposable
, можно обернуть конструкцию в подпрограмму, которая добавит вновь созданный элемент в список вещей, которые будут очищены позже.Затем можно выполнить всю необходимую очистку, просто вызвав Dispose
для всего списка.К сожалению, с точки зрения .net, нет хорошего способа написать процедуру общего назначения, которая будет одновременно подписываться на событие и возвращать Action<>
, IDisposable
или другой такой объект, который можно использовать для отмены подписки.