IDisposable Winform
-
19-08-2019 - |
質問
WinformにIDisposableを実装するためのベストプラクティスは何ですか?
- System.Windows.Forms.Formを拡張するダイアログがあります
- 生成されたdesigner.csには、すでに仮想Dispose(bool)メソッドの実装が含まれています
- フォームにIDisposableを実装するフィールドが手動で追加されました
理想的には、生成されたコードのDispos(bool)オーバーライドにフックして、手動で追加されたIDisposableオブジェクトを破棄できます。これを適切に行う方法に関する推奨事項はありますか?
ありがとう。
スコット
解決
そのDispose実装を.designer.csおよび.csから移動できます。
他のヒント
ただし、フィールドはコンポーネントである必要があります(IComponentインターフェイスまたは類似のものを実装します)。 それは少しやり過ぎではないでしょうか?
イベントハンドラーをDisposingイベントにアタッチし、そのイベントハンドラーでフィールドを破棄できますか?
(または単にDisposeメソッドに追加する-Disposeメソッドのコードは再生成されないため、問題になるとは思わない... 理想的には、Disposeメソッドの実装が* .designer.csクラスにあるべきではありません...)。
フォームのdesigner.csにあるDisposeメソッドのイベントを登録解除します
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
_frmFind.RaiseFindEvent -= _frmFind_RaiseFindEvent;
base.Dispose(disposing);
}
所属していません StackOverflow