Форум администраторов игровых серверов

Форум администраторов игровых серверов (https://forum.zone-game.info/TT.php)
-   Курилка / Yak floor (https://forum.zone-game.info/forumdisplay.php?f=16)
-   -   Объекты передаются по ссылке! Или не совсем??! (https://forum.zone-game.info/showthread.php?t=42431)

Alay 01.08.2017 10:10

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

        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. Короче кто шарит, может объяснить почему так? Ведь по идее все объекты передаются по ссылке а следовательно по тому адресу на который ссылается ссылка мы по идее вполне можем записать новый объект. А оказалось что это не так.

Hint 01.08.2017 10:41

Re: Объекты передаются по ссылке! Или не совсем??!
 
Да бред это, что объекты передаются по ссылке. Всегда возмущали подобные фразы (в том числе от преподавателей в универе много лет назад). Просто объект - это изначально ссылка. Ссылка передается по значению, т. е. внутри метода у нас копия ссылки на тот же объект. Объект тот же, но ссылка другая. Адреса у ссылок разные, значения одинаковые.

Alay 01.08.2017 10:46

Re: Объекты передаются по ссылке! Или не совсем??!
 
А я то думал зачем в шарпе при передаче в параметр объекта можно прописать ref.

Hett 01.08.2017 12:01

Re: Объекты передаются по ссылке! Или не совсем??!
 
УДАЛЕНО.
Показалось ява, а тут C++.

Alay 01.08.2017 12:36

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

Сообщение от Hett (Сообщение 427196)
УДАЛЕНО.
Показалось ява, а тут C++.

тут c#^^

forjoust 01.08.2017 13:41

Re: Объекты передаются по ссылке! Или не совсем??!
 
Почему вместо
t = new TestClass();
этот код
t.Test =new TestClass();
?

Alay 01.08.2017 13:54

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

forjoust 01.08.2017 14:01

Re: Объекты передаются по ссылке! Или не совсем??!
 
Проверил, всё так~
http://i.imgur.com/GgMFf9l.png

Hack 01.08.2017 14:54

Re: Объекты передаются по ссылке! Или не совсем??!
 
По умолчанию в метод передается копия ссылки и во втором случае вы вешаете новый обьект именно на копию, оригинал остается неизменным. В случае с примитивами создается копия самого примитива (актуально как минимум для java). Рекомендую покурить операторы ref, out.

Zubastic 01.08.2017 16:27

Re: Объекты передаются по ссылке! Или не совсем??!
 
А еще можно сделать объект статиком и все будет ок. Но это уже на любителя.
А еще можно вернуть измененный объект обратно.


Текущее время: 06:55. Часовой пояс GMT +3.

Powered by vBulletin® Version 3.8.6
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot