1

在 Winform 上实现 IDisposable 的最佳实践是什么?

  • 我有一个扩展 System.Windows.Forms.Form 的对话框
  • 生成的 Designer.cs 已经包含虚拟 Dispose(bool) 方法的实现
  • 我的表单手动添加了一个实现 IDisposable 的字段

理想情况下,我将能够在生成的代码中挂接到 Dispos(bool) 覆盖以处置手动添加的 IDisposable 对象。关于如何正确执行此操作的任何建议?

谢谢。

斯科特

4

3 回答 3

5

您可以将该 Dispose 实现移出 .designer.cs 和您的 .cs。

于 2009-01-16T16:01:27.550 回答
2

但是,那么您的字段需要是一个组件(实现 IComponent 接口或类似的东西)。会不会有点矫枉过正?

也许您可以将事件处理程序附加到 Disposing 事件,并在该事件处理程序中处理您的字段?

(或者只是将它们添加到 Dispose 方法中 - 我认为这不会有问题,因为 afaik,Dispose 方法中的代码不会重新生成......理想情况下,Dispose 方法实现不应该在 * .designer.cs 类...)。

于 2009-01-16T15:05:25.650 回答
1

我在表单的 Designer.cs 中的 Dispose 方法中取消注册任何事件

    protected override void Dispose(bool disposing)
    {
        if (disposing && (components != null))
        {
            components.Dispose();
        }
        _frmFind.RaiseFindEvent -= _frmFind_RaiseFindEvent;
        base.Dispose(disposing);
    }
于 2012-11-02T14:28:44.703 回答