При удалении элемента управления контейнера (такого как ваша форма) все его обработчики событий будут автоматически удалены и удалены.Эта очистка происходит для вас автоматически, поскольку ни пользовательский элемент управления, ни его контейнерная форма больше не существуют.
Единственный раз, когда вам действительно нужно беспокоиться о вызове RemoveHandler
, это если вы подключаете обработчики событий к объектам, которыеожидается, что срок их службы значительно дольше, чем у их контейнеров.В этом случае возможно создать утечку памяти, потому что этот объект не может быть собран мусором, пока этот обработчик подписан.Вы можете прочитать более подробный пример здесь, в блоге Тесс Феррандез .Это не проблема, если оба объекта выходят из области видимости одновременно.
РЕДАКТИРОВАТЬ: Если вы все еще чувствуете, что вам абсолютно необходимо удалить обработчик (возможно, выобсессивно-компульсивный?), вы можете пойти дальше и сделать это в форме Dispose
.Пурист может отказаться от использования IDisposable
для чего-то подобного, но вы не увидите никаких плохих результатов.Вы действительно хотите убедиться, что вы не реализуете для этого метод Finalize
.В этом нет никакого смысла: метод финализатора не будет вызываться до тех пор, пока не будет более сильных ссылок на объект, но единственный возможный вред в том, что он не вызовет RemoveHandler
, состоит в том, что контейнер будет удерживатьссылка на этот объект дольше, чем необходимо.Вы обманываете себя, пытаясь удалить обработчики событий в методе Finalize
.
Также имейте в виду, что на самом деле не имеет значения , где именно вы это делаете, потому что цельAddHandler
/ RemoveHandler
- позволяет динамически добавлять и удалять обработчики событий .Вы можете вызывать их в любом месте вашего кода, который вы хотите.