1

我已经看到通过“使用”语句自动处置的对象的示例,这是定义对象范围和强制处置的明确方式。

我还看到在 try/catch/finally 块的 finally 中调用了 dispose。

但是,假设一次性对象被实例化为表单类中的属性初始化程序,我如何确保在这种情况下调用 Dispose?

4

4 回答 4

1

如果你的意思是这样的:

var form = new Form { Dependency = new DisposableDependency() };

那么Form类应该在自己的Dispose()方法中处理它,最好的方法是实现自己的方法IDisposable或者在方法中处理这种一次性依赖关系(Close()如果存在)。

于 2013-02-01T16:00:36.147 回答
1

根据您的需要,有多种技术可以完成此任务。来自 MSDN:

When a form is closed, all resources created within the object are closed and the form is disposed.

如果属性的生命周期直接与表单相关联,那么您可以在设计器文件中重写的 Dispose 方法中对对象进行 Dispose。因此,当您调用 时form.Close(), Disposable 对象也将被丢弃。

   /// <summary> 
    /// Clean up any resources being used.
    /// </summary>
    /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
    protected override void Dispose(bool disposing)
    {
        if (disposing && (components != null))
        {
            components.Dispose();
        }

        myDisposableObject.Dispose();

        base.Dispose(disposing);
    }

设计器文件的这个特定部分不会被覆盖,但是,开发人员可能会忽略设计器文件,假设是自动生成的代码。另一种处理方式,例如挂钩到 Form 的 dispose 事件可能更适合您的需要。

于 2013-02-01T16:26:58.407 回答
0

让您从 IDisposable 继承类而不是使用 using(var myclass=new myclass()) {} 希望这对您有所帮助。

于 2013-02-01T19:57:36.723 回答
0

您可以让表单实现 IDisposable 并在 Form.Dispose() 中对对象调用 Dispose() 方法

于 2013-02-01T15:59:28.070 回答