Скажем, у меня есть следующий класс ...Что происходит с ссылочной переменной, если удаленный объект ссылки удаляется?
Class1
{
private ArrayList myList;
private Class1
{
// Here fill myList with a bunch of Foo objects.
}
public ArrayList GetList()
{
return myList;
}
}
Тогда говорят, в каком-то другом классе у вас есть следующий код ...
Class1 myClass = new Class1();
Foo myFavoriteFoo = myClass.GetList()[0] As Foo;
Теперь myFavoriteFoo на самом деле ссылка на Foo, что существует в arraylist в Class1. Что произойдет, если что-то внутри класса 1 удалит этот конкретный Foo из класса или избавится от него? Будет ли myFavoriteFoo немедленно = null? Я предполагаю, что если бы я попытался получить доступ к Foo.SomeMethod(), я бы просто получил исключение, например «Ссылка на объект не установлена в экземпляр объекта» ...
Фактически, если это правильно реализовано для неуправляемых ресурсов, тогда сборщик мусора автоматически освобождает память, выделенную управляемому объекту, когда этот объект больше не используется. 'Http://msdn.microsoft.com/en-us/library/ system.idisposable.aspx. Важно отметить, что можно реализовать «IDisposable», но на самом деле не может использовать неуправляемые ресурсы. – TheCloudlessSky
@TheCloud: GC автоматически освобождает _all_ управляемые объекты, не связанные с неуправляемыми ресурсами. –