Это зависит от вашего использования, если сомневаетесь, не мешает ли его добавить.
Для класса, предназначенного для использования другими программами (например, библиотеками и инфраструктурами), я всегда выполнял бы эту проверку и выбрасывал правильное исключение, поскольку это поможет другим приложениям в диагностике ошибок и сделает класс более устойчивым.
Для внутренних классов, предназначенных только для использования моим приложением, вы можете пропустить проверку, если ошибка возникнет быстро при вызове методов. Например. если бы каждый метод в классе использовал поток, и этот поток был удален или был установлен в нуль, это довольно быстро привело бы к исключению.
Если во внутреннем классе есть методы, которые не вызывают ошибок, я всегда буду использовать явную проверку, поскольку я не хочу ситуации, когда некоторые методы все еще работают после удаления объекта (за исключением методов, которые явно разрешить это, например IsDisposed
).
Наличие явной проверки имеет преимущество в явном документировании того, какие методы разрешено вызывать после удаления объекта. Более того, если вы добавите комментарий вверху методов, которые не вызывают GuardDisposed
, чтобы указать, что это разрешено, то любой метод, который не начинается с GuardDisposed
или комментарий, может рассматриваться как подозрительный.
Для реализации проверки я предпочитаю переместить ее в отдельный метод и использовать как утверждение, например,
public class Foo
{
private bool disposed;
public void DoSomething ()
{
GuardDisposed ();
}
protected void GuardDisposed ()
{
if (disposed)
throw new ObjectDisposedException (GetType ().Name);
}
}