Установка ссылки на ноль на самом деле ничего не делает. Сборщик мусора очистит объект, когда на него больше не будет ссылок, что в данном случае, поскольку вы делаете это в методе Dispose, предположительно, экземпляр Foo больше не будет иметь никаких ссылок на него, и разница в выбор времени, вероятно, не имеет смысла. Как правило, вы реализуете шаблон Dispose, потому что ваш тип имеет в качестве члена класс, который сам реализует IDisposable (в данном случае тип - Object, который не реализует IDisposable), или у вас есть неуправляемые ресурсы, которые вы хотите выпускать детерминистически. Вы можете найти описание шаблона Dispose здесь . Обратите внимание, что если вы создаете переменную-член только для чтения типа, который реализует IDisposable, вы можете вызвать метод Dispose для этого объекта внутри вашего метода Dispose:
public class SomeClass : IDisposable
{
private Boolean mDisposed;
private readonly MemoryStream mStream = new MemoryStream(); // Could be any class that implements IDisposable
public void Dispose() {
Dispose(true);
GC.SuppressFinalize(this);
}
protected void Dispose(Boolean disposing) {
if (disposing & !mDisposed) {
mStream.Dispose(); // Could and should call Dispose
mDisposed = true;
}
return;
}
}
Это работает, потому что только для чтения природа ссылается на объект, а не на сам объект.