質問

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);
    }
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top