Предположим, вы запустили следующую программу:
class Program
{
static Class1 foo = new Class1();
static void Main(string[] args)
{
Class2 bar = new Class2();
Class3 baz = new Class3();
baz = null;
Debugger.Break();
bar.Run();
}
}
Когда программа переходит в отладчик, есть 3+ объекта, которые не могут быть использованы для сборки мусора из-за следующих ссылок:
- a
Class1
объект, на который ссылается статическое поле foo
- a
string[]
объект, на который ссылается параметр args
- ноль или более
string
объекты на которые ссылаетсяобъект string[]
, на который ссылается args
- a
Class2
объект, на который ссылается локальная переменная bar
Объект Class3
подходит для сбора мусора и можетуже собраны или ожидают завершения.
Ссылки на глобальные объекты не допускаются в C #.Ссылки в регистрах ЦП являются подробностями реализации ВМ.