Как добавить функциональность Dispose в С# UserControl?

У меня есть класс, который реализует UserControl. В .NET 2005 метод Dispose автоматически создается в частичном классе класса MyClass.Designer.cs, который выглядит следующим образом:

  protected override void Dispose(bool disposing)
  {
     if (disposing && (components != null))
     {
        components.Dispose();
     }
     base.Dispose(disposing);
  }

Если я хочу добавить свою собственную функциональность Dispose, где бы я ее поместил? Поскольку этот файл сгенерирован, я не хочу добавлять код здесь и рисковать его сдуванием.

Ответ 1

В таком случае я перемещаю сгенерированный метод Dispose в основной файл и расширяю его. Visual Studio уважает это.

Другим подходом будет использование частичного метода (С# 3.0).

Ответ 2

Все классы Component реализуют событие Disposed. Вы можете добавить обработчик события для этого события и очистить вещи там.

Ответ 3

Я считаю, что в этом случае код-генератор чтит ваш код. Это должно быть безопасно помещать в код.

Ответ 4

В VS 2005 (и 2008) вы можете обновить метод Dispose, и он не будет удален, когда вы отредактируете элемент управления от дизайнера.

Ответ 5

Вы можете переместить его из файла .designer.cs и в основной файл .cs, если хотите. Как уже было сказано, он не будет перезаписан.

Ответ 6

Вам просто нужно перегрузить общедоступный метод void Dispose() в классе компонентов, который наследует пользовательский элемент управления.

убедитесь, что вы передаете вызов базовому методу, а также выполняете свой листинг функционально, или вы нарушите функциональность, если вы полностью ее не выполнили.

Ответ 7

Я бы подумал, что самым чистым способом было бы, чтобы ваш контроль подписывался на свое собственное событие Disposed() и выполнял там свою очистку.

Ответ 8

есть событие Unloaded для UserControl, которое вы можете использовать для очистки,