#c# #return #local #ref
#c# #Возврат #Местные новости #ссылка
Вопрос:
Согласно https://www.ecma-international.org/publications/files/ECMA-ST/ECMA-334.pdf#page=436 C # может перемещать переменные по кругу.
Когда вы теперь смотрите на пример хранилища чисел здесь (внизу страницы) https://learn.microsoft.com/en-us/dotnet/csharp/programming-guide/classes-and-structs/ref-returns , У меня есть следующий вопрос.
При перемещении хранилища чисел будут ли исправлены локальные значения возвращаемого значения ref / ref, чтобы указать на новое местоположение?
Или, если у меня есть массив типов значений (struct), и я сохраняю ссылку на один элемент в локальной переменной ref, есть ли гарантия, что к массиву и, следовательно, к элементу, на который ссылается ссылка, все еще можно получить правильный доступ?
Комментарии:
1. Вы обращаетесь к экземпляру объекта. Метод c # dispose перед удалением объекта проверяет, нет ли родительских элементов перед удалением. Таким образом, пока существует ссылка на объект, он все равно будет существовать.
2. Но обновляются ли локальные ссылки, так что вам не нужно привязывать объекты для использования локального ссылки на один из его элементов?
3. Я думаю, что это реальный вопрос, который нужно задать —
ref
использует ли ключевое слово закрепление переменной при обращении к классу, илиref
переменная на самом деле является ссылкой GC, которая будет обновляться по мере перемещения переменной?4. В спецификации, связанной с этим, указано, что
ref
ониout
являются перемещаемыми. И, учитывая, что это неunsafe
так, если на них повлияет GC, это разрушит всю предпосылку безопасности фреймворка.