UserControlを実装するクラスがあります。 .NET 2005では、次のようなMyClass.Designer.cs部分クラスファイルにDisposeメソッドが自動的に作成されます。
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
独自の破棄機能を追加する場合、どこに配置しますか?このファイルは生成されているため、ここにコードを追加したくはありません。
このような場合、生成されたDispose
メソッドをメインファイルに移動し、それを拡張します。 Visual Studioはこれを尊重します。
他のアプローチは、部分的な方法を使用することです(C#3.0)。
すべてのComponent
クラスはDisposed
イベントを実装します。そのイベントのイベントハンドラーを追加して、そこにあるものをクリーンアップできます。
たとえば、UserControl
に次のメソッドを追加できます。
private void OnDispose(object sender, EventArgs e)
{
// do stuff on dispose
}
そして、コンストラクター(またはLoad
イベントハンドラー)で次の行を追加します。
Disposed += OnDispose;
この場合、コードジェネレーターはコードを尊重します。分離コードに配置しても安全です。
VS 2005(および2008)では、Dispose
メソッドを更新できます。デザイナーからコントロールを編集しても削除されません。
ユーザーコントロールが継承するコンポーネントクラスのpublic void Dispose()メソッドをオーバーロードする必要があります。
基本メソッドに呼び出しを渡し、機能的に破棄を行うか、完全に実装しない限り機能を破壊することを確認してください
必要に応じて、.designer.csファイルからメインの.csファイルに移動できます。すでに述べたように、上書きされることはありません。
最もクリーンな方法は、コントロールに独自のDisposed()イベントをサブスクライブさせ、そこでクリーンアップすることだと思います。