如何不使用(属性初始值设定项)处理对象?

时间:2013-02-01 15:56:41

标签: c# .net

我见过通过'using'语句自动处理的对象示例,这是定义对象范围和强制置换的明确方法。

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

但是,假设一次性对象被实例化为表单类中的属性初始值设定项,如何确保在该场景中调用Dispose?

4 个答案:

答案 0 :(得分:1)

如果你的意思是这样的话:

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

然后Form类应该在自己的Dispose()方法中处理它,最好的方法是实现自己的IDisposable或者在Close()方法中处理这样的一次性依赖项,如果这样的话存在。

答案 1 :(得分:1)

根据您的需要,various techniques可以完成此任务。来自MSDN:

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

如果属性的生命周期直接与表单相关联,则可以在设计器文件中的重写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);
    }

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

答案 2 :(得分:0)

您可以让Form实现IDisposable,并在Form.Dispose()

中调用对象上的Dispose()方法

答案 3 :(得分:0)

让你继承自IDisposable 比用 使用(var myclass = new myclass()) {} 希望这会对你有所帮助。