Ответ 1
В таком случае я перемещаю сгенерированный метод Dispose
в основной файл и расширяю его. Visual Studio уважает это.
Другим подходом будет использование частичного метода (С# 3.0).
У меня есть класс, который реализует UserControl. В .NET 2005 метод Dispose автоматически создается в частичном классе класса MyClass.Designer.cs, который выглядит следующим образом:
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
Если я хочу добавить свою собственную функциональность Dispose, где бы я ее поместил? Поскольку этот файл сгенерирован, я не хочу добавлять код здесь и рисковать его сдуванием.
В таком случае я перемещаю сгенерированный метод Dispose
в основной файл и расширяю его. Visual Studio уважает это.
Другим подходом будет использование частичного метода (С# 3.0).
Все классы Component
реализуют событие Disposed
. Вы можете добавить обработчик события для этого события и очистить вещи там.
Я считаю, что в этом случае код-генератор чтит ваш код. Это должно быть безопасно помещать в код.
В VS 2005 (и 2008) вы можете обновить метод Dispose
, и он не будет удален, когда вы отредактируете элемент управления от дизайнера.
Вы можете переместить его из файла .designer.cs и в основной файл .cs, если хотите. Как уже было сказано, он не будет перезаписан.
Вам просто нужно перегрузить общедоступный метод void Dispose() в классе компонентов, который наследует пользовательский элемент управления.
убедитесь, что вы передаете вызов базовому методу, а также выполняете свой листинг функционально, или вы нарушите функциональность, если вы полностью ее не выполнили.
Я бы подумал, что самым чистым способом было бы, чтобы ваш контроль подписывался на свое собственное событие Disposed() и выполнял там свою очистку.
есть событие Unloaded для UserControl, которое вы можете использовать для очистки,