Объекты передаются по ссылке! Или не совсем??! - Форум администраторов игровых серверов
Форум администраторов игровых серверов StormWall - Защита от DDos атак
Регистрация Мнения Справка Сообщество Календарь
Вернуться   Форум администраторов игровых серверов > Разное / Other > Курилка / Yak floor

Курилка / Yak floor
Свободное общение, рассуждения на любые интересные вам темы.

Описание темы:Очень странная штука про которую не знал лет 5

Ответ
Опции темы
Непрочитано 01.08.2017, 10:10   #1
Пользователь

Автор темы (Топик Стартер) Объекты передаются по ссылке! Или не совсем??!

Знали ли вы что :
Код:
        private class TestClass
        {
            public int Test;
        }

        private static void Main()
        {
            TestClass t = new TestClass();
            t.Test = 15
            Make(t);
            Console.WriteLine(t.Test);
            Console.ReadLine();
        }

        private static void Make(TestClass t)
        {
            ++t.Test;
        }
Выведет на консоль: 16.

НО
Код:
        private class TestClass
        {
            public int Test;
        }

        private static void Main()
        {
            TestClass t = new TestClass();
            t.Test = 15
            Make(t);
            Console.WriteLine(t.Test);
            Console.ReadLine();
        }

        private static void Make(TestClass t)
        {
            t=new TestClass();
            t.Test = 16;
        }
Выведет на консоль: 15.

Это справедливо как для шарпа так и для java. Короче кто шарит, может объяснить почему так? Ведь по идее все объекты передаются по ссылке а следовательно по тому адресу на который ссылается ссылка мы по идее вполне можем записать новый объект. А оказалось что это не так.

Последний раз редактировалось Alay; 01.08.2017 в 13:54.
Alay вне форума Ответить с цитированием
Сказали спасибо:
Непрочитано 01.08.2017, 10:41   #2
Аватар для Hint
Герой

По умолчанию Re: Объекты передаются по ссылке! Или не совсем??!

Да бред это, что объекты передаются по ссылке. Всегда возмущали подобные фразы (в том числе от преподавателей в универе много лет назад). Просто объект - это изначально ссылка. Ссылка передается по значению, т. е. внутри метода у нас копия ссылки на тот же объект. Объект тот же, но ссылка другая. Адреса у ссылок разные, значения одинаковые.
__________________
hLaPEx, Evermore, hAuthD, L2on, ...
Hint вне форума Ответить с цитированием
Сказали спасибо:
Непрочитано 01.08.2017, 10:46   #3
Пользователь

Автор темы (Топик Стартер) Re: Объекты передаются по ссылке! Или не совсем??!

А я то думал зачем в шарпе при передаче в параметр объекта можно прописать ref.
Alay вне форума Ответить с цитированием
Непрочитано 01.08.2017, 12:01   #4
Пользователь

По умолчанию Re: Объекты передаются по ссылке! Или не совсем??!

УДАЛЕНО.
Показалось ява, а тут C++.
Hett вне форума Ответить с цитированием
Непрочитано 01.08.2017, 12:36   #5
Пользователь

Автор темы (Топик Стартер) Re: Объекты передаются по ссылке! Или не совсем??!

Цитата:
Сообщение от Hett Посмотреть сообщение
УДАЛЕНО.
Показалось ява, а тут C++.
тут c#^^
Alay вне форума Ответить с цитированием
Сказали спасибо:
Непрочитано 01.08.2017, 13:41   #6
Аватар для forjoust
Пользователь

По умолчанию Re: Объекты передаются по ссылке! Или не совсем??!

Почему вместо
t = new TestClass();
этот код
t.Test =new TestClass();
?
forjoust вне форума Ответить с цитированием
Непрочитано 01.08.2017, 13:54   #7
Пользователь

Автор темы (Топик Стартер) Re: Объекты передаются по ссылке! Или не совсем??!

Потому что второй вариант не копипастил а писал сразу в редакторе комментариев и про*бался
Alay вне форума Ответить с цитированием
Непрочитано 01.08.2017, 14:01   #8
Аватар для forjoust
Пользователь

По умолчанию Re: Объекты передаются по ссылке! Или не совсем??!

Проверил, всё так~
forjoust вне форума Ответить с цитированием
Непрочитано 01.08.2017, 14:54   #9
Аватар для Hack
Пользователь

По умолчанию Re: Объекты передаются по ссылке! Или не совсем??!

По умолчанию в метод передается копия ссылки и во втором случае вы вешаете новый обьект именно на копию, оригинал остается неизменным. В случае с примитивами создается копия самого примитива (актуально как минимум для java). Рекомендую покурить операторы ref, out.
Hack вне форума Отправить сообщение для Hack с помощью Skype™ Ответить с цитированием
Сказали спасибо:
Непрочитано 01.08.2017, 16:27   #10
Аватар для Zubastic
ZG troll squad

По умолчанию Re: Объекты передаются по ссылке! Или не совсем??!

А еще можно сделать объект статиком и все будет ок. Но это уже на любителя.
А еще можно вернуть измененный объект обратно.
__________________
Zubastic вне форума Ответить с цитированием
Сказали спасибо:
Ответ


Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ubuntu ftp(Не передаются сборка) Komar Perfect World 9 05.03.2013 18:25
я наверное совсем кривой e2e4r51 Курилка / Yak floor 18 01.06.2011 10:29
Не совсем привычная разработка qParadoX Рынок / Marketplace 2 18.03.2010 20:13
Игровые объекты Binops Корзина / Trash 7 22.07.2009 07:22


© 2007–2024 «Форум администраторов игровых серверов»
Защита сайта от DDoS атак — StormWall
Работает на Булке неизвестной версии с переводом от zCarot
Текущее время: 13:20. Часовой пояс GMT +3.

Вверх