|
28 / 28 / 5
Регистрация: 07.09.2012
Сообщений: 119
|
|
Как применить ref и out для ссылок на объекты07.09.2012, 14:21. Показов 23509. Ответов 56
Метки нет (Все метки)
Помогите пожалуйста разобраться новичку. Читаю шилдта, никак не могу въехать.... С применением Ref & out для переменных типа значений все предельно ясно. А вот при для объектов не могу понять...
Как вижу все это я: Типы значений: при передаче методу параметр получает копию значения аргумента. Соответственно, любые изменения в методе приводят к изменению копии аргумента, а значит, сам аргумент не изменяется. Все это исправляется при использования ref&out. Ссылочный тип: при передаче методу параметр получает копию ссылки на объект. Т.е. сама ссылка передается по значению. Получается, наш объект теперь имеет "псевдонимы", и его можно изменять из метода. Но что происходит при использовании ref с объектом??? Шилдт приводит пример с методом Swap, в котором изменяются ссылки на объекты.... (с 228) Кто бы мне объяснил весь процесс по пунктам... а то никак не могу понять, что вообще там происходит. Фраза: если модификаторы ref или out указывают на ссылку, то сама ссылка передается по ссылке - убила наповал))) Спасибо заранее
0
|
|
| 07.09.2012, 14:21 | |
|
Ответы с готовыми решениями:
56
Описать класс "Вектор" для хранения ссылок на объекты Как можно в textarea применить ::first-line, или как к первой строки применить стиль, внутри данного элемента |
|
713 / 680 / 126
Регистрация: 30.03.2012
Сообщений: 1,124
|
||||||
| 07.09.2012, 14:27 | ||||||
|
при передаче ссылочного типа по ссылке (ref/out) вы можете изменить саму ссылку, без ref/out вы НЕ можете изменить саму ссылку, но можете изменить объект на который она указывает
3
|
||||||
|
28 / 28 / 5
Регистрация: 07.09.2012
Сообщений: 119
|
|
| 07.09.2012, 14:46 [ТС] | |
|
Что то я еще больше запутался.... Вы говорите. что без ref я могу изменять объект - так почему же в програмке, написанной Вами, метод NotRef не меняет объект? может быть дело в том, что я не совсем понимаю механику самой передачи ссылок и копий ссылок и разницы между ними. Было бы здорово разобраться более подробно...
0
|
|
|
Темная сторона .Net
592 / 489 / 39
Регистрация: 21.07.2012
Сообщений: 1,668
|
||
| 07.09.2012, 15:24 | ||
|
Вот моя тема
NotRef(int[] A) - создаем локальный массив Ref(ref int[] A) - получаем ссылку на ссылку массива как-то так. Добавлено через 10 минут Если это тип-значение ссылку на него(так как они не передаются а копируются каждый раз) Если это ссылочный тип(который передается по ссылке),то создается ссылка на ссылку
0
|
||
|
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
|
||||||
| 07.09.2012, 15:24 | ||||||
|
temcha
2
|
||||||
|
713 / 680 / 126
Регистрация: 30.03.2012
Сообщений: 1,124
|
|||||||
| 07.09.2012, 15:27 | |||||||
|
A=... изменяется не объект, изменяется ссылка вы можете изменить объект (
0
|
|||||||
|
Темная сторона .Net
592 / 489 / 39
Регистрация: 21.07.2012
Сообщений: 1,668
|
|
| 07.09.2012, 15:36 | |
|
0
|
|
|
713 / 680 / 126
Регистрация: 30.03.2012
Сообщений: 1,124
|
|||||||
| 07.09.2012, 15:42 | |||||||
0
|
|||||||
|
Темная сторона .Net
592 / 489 / 39
Регистрация: 21.07.2012
Сообщений: 1,668
|
|
| 07.09.2012, 15:46 | |
|
0
|
|
|
28 / 28 / 5
Регистрация: 07.09.2012
Сообщений: 119
|
||||||
| 07.09.2012, 15:48 [ТС] | ||||||
|
kolorotur, спасибо за пример, но если бы мне было бы достаточно примера, я бы и с Шилдтом все разобрал... так что нет, не стало понятнее.
мне приводят примеры, а мне интересен механизм создания и изменения ссылок. Я понимаю, что создается ссылка на ссылку. Но как появление этой ссылки на ссылку может изменять первоначальную ссылку... Объясните мне механизм изменения ссылок на примере из книги Шилдта:
0
|
||||||
|
713 / 680 / 126
Регистрация: 30.03.2012
Сообщений: 1,124
|
||||||
| 07.09.2012, 15:49 | ||||||
|
странно, а следующая за ним строчка
запускать то пробовали?
1
|
||||||
|
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
|
|
| 07.09.2012, 15:49 | |
|
1
|
|
|
Темная сторона .Net
592 / 489 / 39
Регистрация: 21.07.2012
Сообщений: 1,668
|
|
| 07.09.2012, 15:51 | |
|
Сорри я де-ил
у меня очепятка былаУ меня такой же пример был,что не делаю - не меняет..Думаю может студия вещь говорит,а оказалось руки)
0
|
|
|
3 / 3 / 0
Регистрация: 03.06.2012
Сообщений: 38
|
||||||
| 07.09.2012, 16:02 | ||||||
|
kolorotur,
Написал такой код по подобию вашего
Что не так? Вроде бы подход тот же.
0
|
||||||
|
28 / 28 / 5
Регистрация: 07.09.2012
Сообщений: 119
|
|
| 07.09.2012, 16:06 [ТС] | |
|
оу, ребята, прошу вас общаться в других темах. Я реально не могу понять и очень надеюсь на объяснения...
0
|
|
|
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
|
||
| 07.09.2012, 16:09 | ||
|
Объект - это место в памяти, где хранятся собственно данные. Ссылка - это другое место в памяти, где хранится адрес объекта, то есть адрес собственно данных. Так как ссылка - это тоже место в памяти, то у этого места, разумеется, тоже есть адрес. Допустим, есть некий объект Х, хранящийся по адресу 0хFF На него есть ссылка, хранящаяся по адресу 0xAA - это значит, что значение ячейки памяти, распологающейся по адресу 0xAA равно 0xFF. То есть в этой ячейке хранится адрес объекта. При передаче ссылки в метод создается копия этой ссылки, то есть где-то в памяти выделяется новая ячейка, хранящая адрес на тот же самый объект. При передаче этой ссылки в метод NoRef создается новая переменная по адресу, скажем, 0xF8, в которой хранится значение 0xFF - адрес объекта. Если записать что-нибудь другое в ячейку по адресу 0xF8, то это никак не повлияет на то, что записано по адресу оригинальной ячейки 0xAA. При передаче этой ссылки в метод Ref, новая переменная не создается, а просто передается адрес уже существующей ячейки: 0xAA, то есть адрес оригинальной ссылки. Разумеется, если в этом месте памяти записать что-нибудь левое, то это повлияет на все переменные, использующие эту ячейку для хранения адреса собственно данных.
1
|
||
|
3 / 3 / 0
Регистрация: 03.06.2012
Сообщений: 38
|
|
| 07.09.2012, 16:09 | |
|
0
|
|
|
28 / 28 / 5
Регистрация: 07.09.2012
Сообщений: 119
|
||
| 07.09.2012, 16:35 [ТС] | ||
|
kolorotur, с этим более-менее ясно. Но возникают новые вопросы: с точки зрения памяти, аргумент, который передается и параметр метода - одна и та же переменная?
Вы говорите
0
|
||
|
3 / 3 / 0
Регистрация: 03.06.2012
Сообщений: 38
|
|
| 07.09.2012, 16:47 | |
|
И все таки
0
|
|
|
912 / 672 / 134
Регистрация: 01.03.2010
Сообщений: 1,279
|
||||||||||||||||
| 07.09.2012, 16:52 | ||||||||||||||||
|
temcha,
Возьмем фрагмент примера от colorotur
Первая ссылка после - Person p = new Person { Name = "Петя" }; Вторая после static void NoRef(Person p) (копия первой) Теперь есть два варианта: 1. Повторю, и ссылка и ее копия ссылаются на один и тот же объект p Следовательно, работая с любой из них можно одинаково менять объект p
2. Можно заставить копию ссылки ссылаться на другой объект. Тогда к прошлому объекту p она отношения уже иметь не будет
При работе с ref копия не создается. Что передали, с тем и работаем. Поэтому в примере Шилдта можно было поменять ссылки местами через посредника],
0
|
||||||||||||||||
| 07.09.2012, 16:52 | |
|
Помогаю со студенческими работами здесь
20
Перебор ссылок на объекты
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
|
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
|
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . .
а удачный момент так и не приходит.
|
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица.
Задача: зафиксировать три левых колонки в отчете.
Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
/ / . . .
|
|
Настройки VS Code
Loafer 13.04.2026
{
"cmake. configureOnOpen": false,
"diffEditor. ignoreTrimWhitespace": true,
"editor. guides. bracketPairs": "active",
"extensions. ignoreRecommendations": true,
. . .
|
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2.
Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива.
Было так:. . .
|
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2.
Задача: реализовать контроль корректности заполнения дат назначения. . .
|
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html
Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
|