Как использовать IDisposable для удаления объекта - PullRequest
0 голосов
/ 28 июля 2010

Я хочу использовать интерфейс IDisposable для очистки любого ресурса из памяти, который не используется.

public class dispose:IDisposable
{
        public void Dispose()
        {

            throw new NotImplementedException();
        }

        public void fun()
        {
            PizzaFactory _pz = new PizzaFactory();   //
        }
    }

Я хочу избавиться от pz объекта, когда нет ссылки на него, существует. Пожалуйста, дайте мне знать, как это сделать.

Ответы [ 5 ]

10 голосов
/ 28 июля 2010

Вот для чего сборщик мусора. Если все, что вас беспокоит, - это восстановление памяти, пусть сборщик мусора сделает это за вас. IDisposable - это восстановление неуправляемых ресурсов (сетевых подключений, файловых дескрипторов и т. Д.). Если PizzaFactory имеет какой-либо из них, то он должен реализовать IDisposable - и вы должны явно управлять его удалением. (Вы можете добавить финализатор для запуска в некоторый момент после того, как на него больше не будет живых ссылок, но он недетерминирован.)

5 голосов
/ 28 июля 2010

Звучит больше сбора мусора, а не IDisposable.

, если _pz является одноразовым и должен быть утилизирован при удалении экземпляра dispose (обычно через using), вы можете:

    public void Dispose()
    {
        if(_pz != null) _pz.Dispose();
        _pz = null;
    }

Вы можете сделать что-то связанное с финализаторами, но это не очень хорошая идея.

3 голосов
/ 28 июля 2010
public void Dispose()
{
     _pz.Dispose();
}

если PizzaFactory не IDisposable, вам ничего не нужно.Есть сборщик мусора.

0 голосов
/ 28 июля 2010

Посмотрите на стандартную схему утилизации.

http://msdn.microsoft.com/en-us/library/fs2xkftw.aspx

0 голосов
/ 28 июля 2010

vaibhav - разве вы не будете реализовывать интерфейс IDisposable для использования конструкции с использованием ?? таким образом, он автоматически удаляется ..

джим

...