При реализации IDisposable я понимаю, что каждый метод, который не следует вызывать после удаления объекта, должен вызывать ошибку ObjectDisposedException
. Но каков стандарт для объекта имени, который следует передать конструктору исключения?
Что должно быть передано в качестве имени объекта при создании исключения ObjectDisposedException?
Ответы (3)
Я считаю, что рекомендуемая практика заключается в следующем:
throw new ObjectDisposedException(GetType().FullName);
Или включая проверку, эти две строки кода вверху каждого метода, который в ней нуждается (очевидно, не сам метод Dispose
):
if (this.disposed)
throw new ObjectDisposedException(GetType().FullName);
Может быть даже полезно преобразовать это в крошечный метод для удобства использования.
person
Noldorin
schedule
26.12.2009
Также см. этот вопрос и мой ответ для общих рекомендаций: stackoverflow.com/questions/668440/
- person Noldorin; 27.12.2009
Даже сама .NET Framework здесь не очень последовательна.
Дэвид М. Кин (бывший разработчик команды FxCop в Microsoft) добавил комментарий к документация MSDN для ObjectDisposedException:
Типичное использование этого типа выглядит примерно так:
[C#] private void CheckDisposed() { throw new ObjectDisposedException(GetType().FullName); }
person
Albic
schedule
26.12.2009
Я пропустил его. Мут научиться читать комментарии в документации также.
- person Wilhelm; 27.12.2009
@JonathonReinhart: комментарий, очевидно, был удален из .NET 4-версии страницы. Я исправил ссылку выше, чтобы она относилась к версии .NET 3.5, которая включает цитируемый комментарий.
- person Albic; 30.06.2012
Я не верю, что для этого существует стандарт, я бы вернул тип объекта вместе со строковым содержимым уникального идентификационного поля (своего рода «первичный ключ»).
person
Aviad P.
schedule
26.12.2009