Основное различие между ссылкой и ссылкой отслеживания состоит в том, что ссылка отслеживания может перемещаться сборщиком мусора.
Во время запуска ГК объекты перемещаются. Если вы обращаетесь к объекту после его перемещения по адресу, вы читаете garbadge. Вот где появляется дескриптор отслеживания. Он знает о перемещении gc и его объекта. Вы все еще можете получить доступ к объекту после того, как он был перемещен.
С MSDN :
Ссылка на отслеживание похожа на
C ++ ссылка, чтобы указать, что
переменная передается в функцию
ссылка и создать альтернативу
имя для объекта. Тем не менее
объект, на который ссылается отслеживание
ссылка может быть перемещена во время
исполнение общим языком
сборщик мусора во время выполнения.
Я не знаю, если взятие ссылки (&) на gc-объект останавливает его перемещение gc.