zequion Ответов: 1

Элементы управления поддерживают эти значения


Если я передаю функции элемент управления, который не отображается на экране в качестве параметра, а не по ссылке, и изменяю одно из его значений, элемент управления сохраняет это значение. Как работает этот механизм?

Что я уже пробовал:

Что вы пробовали?&и GT;что вы пробовали?

1 Ответов

Рейтинг:
6

OriginalGriff

Элемент управления является классом, поэтому все экземпляры элементов управления являются экземплярами классов, что делает их ссылочными типами. Экземпляры на основе структур (например, Int32, Point и т. д.) - Это типы значений, которые очень сильно отличаются.
И это означает, что даже когда вы вызываете метод и передаете экземпляр в качестве параметра, вы передаете ссылку на него.

Вы можете посмотреть здесь: Использование структуры и класса - что это все значит?[^] - это становится немного детализированным, но это объясняет, что все это значит и почему вы получаете эффект, который вы наблюдаете.


[no name]

Это понятно. Теперь у меня есть сомнения. В C # 7.0 было добавлено, что функция возвращает ссылку на переменную без использования asafe. Если я хочу то же самое, но без вызова функции или использования сейфа, как мне это сделать?

Например: ref int index = ref myFunction ();

Я хочу: ref int index = & myvariable;
И как долго вы будете хранить ref int index без очистки менеджером памяти?

OriginalGriff

Нет, вы не можете - ссылка-это не то же самое, что адрес, это "указатель на стероидах", который не является фиксированным местоположением, как адрес переменной в C. Ссылка "декодируется" во время выполнения, чтобы обеспечить доступ к данным, а сами данные могут быть перемещены сборщиком мусора в другое физическое место "за кулисами" без того, чтобы ваш код заметил или даже осознал, что что-то вообще произошло.

Чего вы пытаетесь достичь, если считаете, что вам это нужно?