Исправление классов, которые используют одноразовые вещи - PullRequest
0 голосов
/ 07 марта 2011

Учитывая этот пример кода, как лучше всего исправить это так, чтобы растровое изображение было расположено:

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 Form1 и вызовите распоряжение на _class2.

Это кажется лучшим способом, но я хочу убедиться, что это правильный путь.

Ответы [ 4 ]

2 голосов
/ 07 марта 2011

Да, я бы внедрил Class2 для реализации IDisposable. Или вы можете сделать что-то вроде

public class Class2
{
    public Class2()
    {
        using (Bitmap _bitmap = new Bitmap(100,100)) {}
    }
}
1 голос
/ 07 марта 2011

Почему бы не использовать блок using вместе с предложением Кумара о реализации Class2 IDisposable?

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

Блок using обеспечит вызов Dispose() для Class2, и там вы правильно утилизируете свой Bitmap.

1 голос
/ 07 марта 2011

Так я бы это сделал;Я считаю, что это «правильный» подход.

0 голосов
/ 07 марта 2011

Я думаю, вы должны реализовать IDisposable в Class2.Кроме того, вы можете переопределить Form.Dispose (bool):

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