修复使用Disposable东西的类

时间:2011-03-07 18:13:40

标签: c# dispose

鉴于此示例代码,修复它的最佳方法是什么,以便处理位图:

Form1 form = new Form1();
form.ShowDialog();
form.Dispose();

public class Form1 : Form
{
    private Class2 _class2;
    public Form1()
    {
        _class2 = new Class2();
    }
}

public class Class2
{
    private Bitmap _bitmap;
    public Class2()
    {
        _bitmap = new Bitmap(100,100);
    }
}

我首先将_bitmap.Dispose()放在Class2的析构函数中。但我认为这不会真的有效。

我是否需要使用Class2实现IDisposable?然后附加到Disposed的{​​{1}}事件,并在Form1上调用dispose。

这似乎是最好的方式,但我想确保它是正确的方式。

4 个答案:

答案 0 :(得分:2)

是的,我会实现Class2实现IDisposable。或者你可以做类似

的事情
public class Class2
{
    public Class2()
    {
        using (Bitmap _bitmap = new Bitmap(100,100)) {}
    }
}

答案 1 :(得分:1)

这就是我这样做的方式;我相信这是“正确的”方法。

答案 2 :(得分:1)

为什么不使用using块以及Kumar建议使用Class2实现IDisposable

    public Form1()
    {
       using(Class2 _class2 = new Class2()){
          //do stuff with _class2
          //dispose will automatically get called when using is exited
       }
    }

using阻止将确保在Class2上调用Dispose(),并且在那里您将正确处理Bitmap

答案 3 :(得分:0)

我认为你应该在Class2中实现IDisposable。此外,您可能希望覆盖Form.Dispose(bool):

    protected override void Dispose(bool disposing) {
        if (disposing && (_class2 != null)) _class2.Dispose();
        base.Dispose(disposing);
    }