Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/8: Рейтинг темы: голосов - 8, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 16.09.2017
Сообщений: 33
1

Передача ссылки на объект класса (массив объектов класса)

11.01.2020, 11:32. Просмотров 1511. Ответов 3
Метки нет (Все метки)


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

У меня есть массив объектов класса Item инициализация которого происходит в отдельном методе путем извлечения данных из xml документа.
C#
1
2
3
4
5
6
Item[] LoadItems()
        {
            Item[] items = new Item[itemsCount];
 
            return items;
        }
Скажите пожалуйста, в чем отличие между этими способами изменения данных в массиве?
1.
C#
1
2
3
4
5
void ChangeValue(Item[] _items)
        {
            Item[] items = _items;
            items [0] = 100;
        }
2.
C#
1
2
3
4
void ChangeValue(ref Item[] items)
        {
            items[0] = 500;
        }
Я знаю, что в плюсах, когда мы передаем данные в метод, то внутри метода создается копия переданных данных с которыми мы работаем и чтобы изменения сохранились в оригинале нужно передавать ссылку на оригинал.
Я попробовал вышеупомянутые методы и они оба меняют оригинал. Выходит, что c# по умолчанию передает ссылку, а не сам объект?
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
11.01.2020, 11:32
Ответы с готовыми решениями:

Передача объектов дочерних классов через массив объектов родительского класса в функцию
Здравствуйте. Возможно, вопрос больше относится к теории ООП, но все же я не решился задавать его в...

Возможно ли создать объект своего класса, который состоит из объектов другого класса?
Возможно ли создать объект своего класса, который состоит из объектов другого класса, например: ...

Объект класса - список объектов другого класса
Есть класс композиция, есть класс CD-диск. CD должен состоять из списка Композиций. Как после...

Передача конструктору одного класса объект другого класса
Здравствуйте, кодеры. Столкнулся с проблемой. У меня есть 2 класса Camera и Game и...

3
4648 / 3201 / 1364
Регистрация: 09.05.2015
Сообщений: 7,866
11.01.2020, 12:21 2
Лучший ответ Сообщение было отмечено GeneralBoobs как решение

Решение

Цитата Сообщение от GeneralBoobs Посмотреть сообщение
Выходит, что c# по умолчанию передает ссылку, а не сам объект?
Ссылочные типы передаются по ссылке, а значимые (struct) по значению (копия).

Массив - класс, т.е. ссылочный тип.
1
1105 / 840 / 388
Регистрация: 30.10.2017
Сообщений: 2,357
11.01.2020, 12:27 3
Цитата Сообщение от GeneralBoobs Посмотреть сообщение
Выходит, что c# по умолчанию передает ссылку, а не сам объект?
System.Array является классом, а следовательно передается ссылка на оригинал, а не создается копия.

Цитата Сообщение от GeneralBoobs Посмотреть сообщение
Я знаю, что в плюсах, когда мы передаем данные в метод, то внутри метода создается копия переданных данных с которыми мы работаем и чтобы изменения сохранились в оригинале нужно передавать ссылку на оригинал.
В C++ массивы представляют собой указатель, поэтому при передаче его в функцию копия членов не создается, изменения его членов будут так же менять оригинал как и в C#.
1
0 / 0 / 0
Регистрация: 16.09.2017
Сообщений: 33
11.01.2020, 12:40  [ТС] 4
Большое спасибо за ответы!
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
11.01.2020, 12:40

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь или здесь.

Как занести в объект массив объектов дргуго класса
Толком не знаю чего хочу и нагуглить не получилось Задача у меня такая: Объект класса №1 это (...

Массив объектов одного класса как поле другого класса
Доброе время суток. Мне тут в универе задали лабу, нужно создать класс полем которого будет массив...

Как правильно создать массив объектов текущего класса в методе данного класса?
Привет! Ставится задача создания метода, который формирует массив объектов. Правильно ли делать...

Массив объектов класса. Печать строк-членов класса.
подскажите, как распечатать строки? #include "myString.h" #include <iostream> #define stop...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.