Как добавить функцию 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 () и очистка.