Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
19 / 19 / 4
Регистрация: 29.10.2009
Сообщений: 150
1

По поводу передачи ссылок по значению

29.06.2010, 16:23. Показов 888. Ответов 4
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
есть такой код

C#
1
2
3
4
5
6
7
8
9
10
11
12
        static void RefFunc(Two t)
        {
            t = new Two(22, "Nick"); /*  4. ссылка передается по значению, т.е. в t будет храниться адрес обьекта, который передается в функцию. */
            t.Display();               // 5. Здесь все нормально, т.е. в t теперь 22 года и имя Nick
        }
        static void Main(string[] args) 
        {
            Two t = new two(2, "Sam"); // 1. создаем экземпляр класса Two
            t.Display();               // 2. просто отображаем возраст и имя
            RefFunc(t);                // 3. дальше в функцию
            t.Display();               /* 6. но здесь изменения, которые произошли в RefFunc, не действуют, т.е. в t опять возраст 2 и имя Sam. Так вопрос, почему изменения не произошли? в книге написано, что невозможно изменить обьект в RefFunc, на который указывает ссылка, но мне интересно почему, и куда сохраняются данные 2 и "Sam" перед вызовом функции RefFunc и во время ее действия, т.е. когда в t хранятся 22 и "Nick"   */
        }
фух, нашпарил... надеюсь на вашу помощь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
29.06.2010, 16:23
Ответы с готовыми решениями:

По поводу текста ссылок.
Недавно перевел свои сайты на новую систему постановки ссылок. Основной смысл их изложен вот в этой...

По поводу покупки ссылок.
Подскажите новичку, что эффективнее: разместить ссылки на свой сайт на 100 сайтах с тИЦ = 10, или...

По поводу массивов, функций и ссылок
Написал программу. Хочу, чтобы массив вводился один раз, и выводился несколько раз отсортированный...

По поводу ссылок и конструктора копирования
Никак не пойму. При создании объекта и передачи конструктору в качестве параметра объекта другого...

4
Padawan
473 / 323 / 30
Регистрация: 30.01.2010
Сообщений: 1,841
29.06.2010, 16:26 2
используйте модификатор доступа ref перед объявлением переменной в методе
C#
1
static void RefFunc(ref Two t)
1
19 / 19 / 4
Регистрация: 29.10.2009
Сообщений: 150
29.06.2010, 16:53  [ТС] 3
Цитата Сообщение от Johny_D Посмотреть сообщение
используйте модификатор доступа ref перед объявлением переменной в методе
C#
1
static void RefFunc(ref Two t)
да нет, знаю о модификаторе ссылки, я просто хочу узнать почему все именно так... но спасибо!
0
I ♥ C#
470 / 261 / 25
Регистрация: 07.05.2010
Сообщений: 567
29.06.2010, 20:32 4
Возможно так будет понятней:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
        static void RefFunc(Two AnotherT)
        {
            AnotherT = new Two(22, "Nick");
/*AnotherT - новая переменная ссылочного типа, первоначально хранившая ссылку
на объект (2, Sam), но теперь хранит ссылку на новый объект (22, Nick).
Переменную t, заметьте, никто не трогал. */
            AnotherT.Display();
        }
/*Область действия новой переменной закончилась, если на объект (22, Nick)
больше нет ссылок, то он будет уничтожен сборщиком мусора. */
 
        static void Main(string[] args) 
        {
            Two t = new two(2, "Sam"); //сохраняем ссылку на объект в переменную t
            t.Display();
            RefFunc(t);  
            t.Display(); //переменную t никто не изменял, поэтому она ссылается на объект (2, "Sam")
        }
А вот с ref:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
        static void RefFunc(ref Two SameT)
        {
            SameT = new Two(22, "Nick"); 
/*SameT - это старая переменная t, но в пределах этого метода к ней надо обращаться
по имени SameT, хотя, конечно, можно и в этом методе назвать ее t. Любое
изменение SameT равносильно изменению t */
            SameT.Display();
        }
 
        static void Main(string[] args) 
        {
            Two t = new two(2, "Sam");
            t.Display();
            RefFunc(ref t); //Говорим RefFunc, чтобы оперировал с переменной t, а не создавал новую
            t.Display();
        }
1
19 / 19 / 4
Регистрация: 29.10.2009
Сообщений: 150
29.06.2010, 21:45  [ТС] 5
спасибо... понял
0
29.06.2010, 21:45
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
29.06.2010, 21:45
Помогаю со студенческими работами здесь

Вопрос по поводу склейки ссылок
Есть ключевое слово "Курсы вождения" я создал два анкора со следующими текстами: "Курсы вождения с...

вопрос по поводу ссылок - http c или без www?
Доброго дня, коллеги. Такой вопрос - при обмене ссылками могут размещать http://www.site.ru или ...

Два способа передачи параметров в функцию: по значению и по адресу
Помогите , Нужно в этой программе передать параметры функции по адресу. не могу понять как это...

Реализовать программу одним из способом передачи параметров в функцию(по адресу,по значению,по ссылке)
Даны координаты вершин двух треугольников. Определить, какой из них имеет большую площадь. ...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru