Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/9: Рейтинг темы: голосов - 9, средняя оценка - 4.67
0 / 0 / 0
Регистрация: 14.07.2014
Сообщений: 18
.NET 4.x

Использование модификатора ref для ссылок на объекты (для чайника)

07.12.2014, 14:50. Показов 1912. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет! Изучаю c# по учебнику Шилдта, также разбираю примеры из него. Из примера ниже мне непонятно. Зачем здесь использовать модификатор ref, если ob1 и ob2, насколько я понимаю, являются ссылками? Зачем нужна ссылка на ссылку?
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
using System;
// Поменять местами две ссылки
class RefSwap {
    int a,b;
 
    public RefSwap(int i, int j) {
        a = i;
        b = j;
    }
 
    public void Show() {
        Console.WriteLine("a: {0}, b: {1}", a, b); }
    // Метод изменяет свои аргументы
    public void Swap(ref RefSwap ob1, ref RefSwap ob2)                                // Ссылка на ссылку, зачем?
    {
        RefSwap t;
        t = ob1;
        ob1 = ob2;
        ob2 = t;
    }
}
 
class RefSwapDemo {
 
    static void Main () {
RefSwap x = new RefSwap(1, 2);
RefSwap y = new RefSwap(3, 4);
 
        Console.Write("x до вызова: "); x.Show();
        Console.Write("y до вызова: "); y.Show();
       // Смена объектов, на которые ссылаются аргументы x и y
        Console.WriteLine();
        x.Swap(ref x, ref y);                                                                // Для чего здесь ref?
 
        Console.Write("x после вызова: ");
        x.Show();
 
        Console.Write("y после вызова: ");
        y.Show();
        Console.ReadLine();
    }
}
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
07.12.2014, 14:50
Ответы с готовыми решениями:

Как применить ref и out для ссылок на объекты
Помогите пожалуйста разобраться новичку. Читаю шилдта, никак не могу въехать.... С применением Ref & out для переменных типа значений...

Использование модификатора ref
Здравствуйте подскажите пожалуйста принцип работы ref на примере ниже приведённого кода class Program { static void Main() ...

Использование модификатора static для элементов класса
Доброго время суток! Господа, бьюсь бьюсь в двух средах разработки и с одной книжкой... И есть чувство - что виноваты не лыжи...

6
 Аватар для Metall_Version
2152 / 1289 / 516
Регистрация: 04.03.2014
Сообщений: 4,092
07.12.2014, 15:17
Цитата Сообщение от VVZ Посмотреть сообщение
Зачем нужна ссылка на ссылку?
если использовать без ref то в метод передастся копия ссылки, если использовать ref передастся сама ссылка

Добавлено через 50 секунд
тут все подробно расписано http://msdn.microsoft.com/ru-r... 38f28.aspx
1
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
07.12.2014, 20:42
Цитата Сообщение от VVZ Посмотреть сообщение
Зачем нужна ссылка на ссылку?
Чтобы при изменении ссылки в вызываемом методе эти изменения были видны в вызывающем методе?
1
Эксперт .NET
 Аватар для insite2012
5548 / 4311 / 1218
Регистрация: 12.10.2013
Сообщений: 12,371
Записей в блоге: 2
07.12.2014, 21:16
VVZ, советую внимательно почитать про модификаторы и их особенности в случае применения к ссылочным переменным.
1
0 / 0 / 0
Регистрация: 14.07.2014
Сообщений: 18
09.12.2014, 18:34  [ТС]
Т.е. копия ссылки создаст новый объект в вызываемом методе?
0
 Аватар для Metall_Version
2152 / 1289 / 516
Регистрация: 04.03.2014
Сообщений: 4,092
09.12.2014, 19:05
Лучший ответ Сообщение было отмечено VVZ как решение

Решение

Цитата Сообщение от VVZ Посмотреть сообщение
Т.е. копия ссылки создаст новый объект в вызываемом методе?
нет.
если не используем ref, то ссылка из вызывающего метода, копируется в вызываемый метод.. и если изменить ссылку в вызываемом методе то сам объект не изменится, т.к. ссылка на него в вызывающем методе останется прежней. Но если изменять члены объекта (поля, свойства..) то это изменится в объекте.

если используем ref, то ссылка из вызывающего метода, передается (такая как есть без копирования) в вызываемый метод.. и если изменить ссылку в вызываемом методе то все изменения отобразятся на объекте.
И опять же - если изменять члены объекта (поля, свойства..) то это изменится в объекте.
2
0 / 0 / 0
Регистрация: 14.07.2014
Сообщений: 18
09.12.2014, 19:31  [ТС]
Спасибо большое, за подробное объяснение, понял.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
09.12.2014, 19:31
Помогаю со студенческими работами здесь

Описать класс "Вектор" для хранения ссылок на объекты
Объявить класс "Вектор" для хранения ссылок на объекты. Класс должен иметь следующие поля: -массив ссылок, который может расти ...

Использование модификатора new
using System; using System.Linq; using System.Text; using System.Threading.Tasks; namespace test { class Program ...

Использование модификатора static
у троелсена есть такая заметка по поводу static На заметку! Здесь следует повторить: статические члены могут оперировать только...

Использование модификатора параметров out
Доброго времени суток! Этот метод проверяет строку на соответствие наличию/отсутствию (в зависимости от параметра allow) в строке...

Использование модификатора * в функции scanf()
Код из книги Стивена Прата: /*skip2.c - - игнорирует первые два целых числа из потока ввода */ #include <stdio.h> int main (...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru