2008-10-22 4 views
2

У кого-нибудь есть хорошие статьи или учебники по правильному использованию dispose и IDisposable. Я пытаюсь объяснить это некоторым младшим разработчикам и хотел получить дополнительный материал, примеры и т. Д.Winforms Disposing IDisposable

ответ

6

Хорошее место для начала - это статья MSDN от Shawn Farkas http://msdn.microsoft.com/en-us/magazine/cc163392.aspx. Окончательная статья - Джо Даффи (Joe Duffy) по телефону http://www.bluebytesoftware.com/blog/2005/04/08/DGUpdateDisposeFinalizationAndResourceManagement.aspx с последующим наблюдением в http://www.bluebytesoftware.com/blog/2008/02/18/IDisposableFinalizationAndConcurrency.aspx

1

Многие старые источники консультаций по этому поводу подразумевают, что IDisposable каким-то образом связан с финализаторами. Обратите особое внимание на комментарии Херба Саттера по этому вопросу. НЕ переходите к выводу, что вам нужно написать финализатор, если вы реализуете IDisposable, чтобы «убедиться, что Dispose запускается в конце концов, если клиент забудет его называть». Обычно это не так. Класс может реализовать IDisposable, чтобы он мог выполнять различные вызовы управляемых объектов, которыми он владеет, например. Утилизируйте эти объекты по очереди. Это абсолютно бессмысленно делать из финализатора, потому что финализаторы не могут надежно получить доступ к другим управляемым объектам. Также все, что делает финализатор, должно быть вызвано из любого потока. Финализаторы - очень неясная продвинутая вещь, тогда как IDisposable - это простой шаблон, который должен быть вездесущим. И появление SafeHandle changes the situation further.

0
+1

«Если вы создаете класс, который не использует неуправляемые ресурсы, тогда вы не должны реализовывать IDisposable». Откуда люди получают эту идею? –

0

Скажите им, чтобы всегда использовать с помощью заявления на одноразовых предметов.

using (MyDisposable obj = new MyDisposable()) 
{ 
    obj.some_stuff(); 

} //obj is disposed here 
Смежные вопросы