Просто чтобы добавить к тому, что уже было сказано:
Важно понимать, что есть объекты , и есть ссылки (переменные), и это не одно и то же .
Когда вы пишете var a = new object();
, вы делаете две вещи:
- Создание нового экземпляра
object
. Этот экземпляр не имеет «имени» - просто место в памяти. Что есть, то есть. Но для того, чтобы у нас было что назвать, давайте назовем это «Боб».
- Объявление переменной
a
, которая ссылается на object
только что созданного.
Теперь, когда вы пишете a = null;
, вы делаете ничего Бобу. Вы изменяете a
на ссылку вместо Боба, null
, или, другими словами, «нет объекта». Таким образом, вы больше не можете получить доступ к «Бобу», используя a
.
Значит ли это, что Боба не существует? Нет. Боб все еще там, где он был.
Подумайте об этом (в основном это сценарий, упомянутый Хенком ):
var a = new object(); // Again, we're calling this object Bob.
object b = a;
Теперь b
- это еще одна переменная , такая же, как a
. И так же, как a
, b
ссылается на Боба. Но опять же, как и с a
, запись b = null;
ничего не делает для Боба. Он просто меняет b
, так что больше не указывает на объект.
Вот куда я иду с этим. Похоже, у вас сложилось впечатление, что вы делаете это:
a.Dispose();
... как-то так и сделал:
a = null;
... что было как-то эквивалентно этому:
Bob
= null; // now
Bob
is no object?
Но если бы это было так, то b
(выше) теперь будет указывать на без объекта , даже если для него никогда не было установлено значение null
!
В любом случае, из моего объяснения выше, надеюсь, ясно, что это просто не то, как работает CLR. Как отметил Джон, интерфейс IDisposable
на самом деле не связан с освобождением памяти. Речь идет об освобождении общих ресурсов. Он не - не может - удалять объекты из памяти, как если бы это было так, тогда у нас было бы поведение, которое я описал выше (ссылки внезапно становятся недействительными из ниоткуда).
Я знаю, что это было слабо связано с вашим конкретным вопросом о IDisposable
, но я чувствовал, что этот вопрос возник из-за неправильного представления о связи между переменными и объектами; и поэтому я хотел сделать эти отношения более ясными.