Как добавить функцию Dispose в C# UserControl?

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

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

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

8 ответов


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

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


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

например, в вашем UserControl вы можете добавить следующий метод:

private void OnDispose(object sender, EventArgs e)
{
    // do stuff on dispose
}

и в конструкторе (или в Load обработчик событий) добавьте следующую строку:

Disposed += OnDispose;

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


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


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


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

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


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


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