我有一个实现UserControl的类。在.NET 2005中,在MyClass.Designer.cs部分类文件中自动创建一个Dispose方法,如下所示:
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
如果我想添加自己的Dispose功能,我会把它放在哪里?由于生成了这个文件,我不想在这里添加代码并冒着被吹走的风险。
答案 0 :(得分:66)
所有Component
个类都会实现Disposed
个事件。您可以为该事件添加事件处理程序并清理其中的内容。
例如,在您的UserControl
中,您可以添加以下方法:
private void OnDispose(object sender, EventArgs e)
{
// do stuff on dispose
}
在构造函数(或Load
事件处理程序)中添加以下行:
Disposed += OnDispose;
答案 1 :(得分:53)
在这种情况下,我将生成的Dispose
方法移动到主文件并进行扩展。 Visual Studio尊重这一点。
另一种方法是使用部分方法(C#3.0)。
答案 2 :(得分:7)
我相信在这种情况下,代码生成器会尊重您的代码。把它放在代码隐藏中应该是安全的。
答案 3 :(得分:6)
在VS 2005(和2008)中,您可以更新Dispose
方法,当您从设计器编辑控件时,它不会被删除。
答案 4 :(得分:2)
如果需要,可以将其从.designer.cs文件移出到主.cs文件中。如前所述,它不会被覆盖。
答案 5 :(得分:2)
您只需要重载用户控件继承的Component Class中的public void Dispose()方法。
确保您将调用传递给基本方法以及在功能上进行处置,否则您将破坏功能,除非您完全实现它
答案 6 :(得分:0)
我认为最干净的方法是让你的控件订阅自己的Disposed()事件并在那里进行清理。
答案 7 :(得分:-1)
UserControl有一个可用于清理的Unloaded事件,