Рейтинг:
6
OriginalGriff
Элемент управления является классом, поэтому все экземпляры элементов управления являются экземплярами классов, что делает их ссылочными типами. Экземпляры на основе структур (например, Int32, Point и т. д.) - Это типы значений, которые очень сильно отличаются.
И это означает, что даже когда вы вызываете метод и передаете экземпляр в качестве параметра, вы передаете ссылку на него.
Вы можете посмотреть здесь: Использование структуры и класса - что это все значит?[^] - это становится немного детализированным, но это объясняет, что все это значит и почему вы получаете эффект, который вы наблюдаете.
[no name]
Это понятно. Теперь у меня есть сомнения. В C # 7.0 было добавлено, что функция возвращает ссылку на переменную без использования asafe. Если я хочу то же самое, но без вызова функции или использования сейфа, как мне это сделать?
Например: ref int index = ref myFunction ();
Я хочу: ref int index = & myvariable;
И как долго вы будете хранить ref int index без очистки менеджером памяти?
OriginalGriff
Нет, вы не можете - ссылка-это не то же самое, что адрес, это "указатель на стероидах", который не является фиксированным местоположением, как адрес переменной в C. Ссылка "декодируется" во время выполнения, чтобы обеспечить доступ к данным, а сами данные могут быть перемещены сборщиком мусора в другое физическое место "за кулисами" без того, чтобы ваш код заметил или даже осознал, что что-то вообще произошло.
Чего вы пытаетесь достичь, если считаете, что вам это нужно?