powered by simpleCommunicator - 2.0.54     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / ссылочные типы в методах
7 сообщений из 7, страница 1 из 1
ссылочные типы в методах
    #38911305
DimaKhodan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
разобрал я тему (по крайней мере так думал) с значимыми типами и ссылочными. все как говорится, понял, да. все работает. но вдруг столкнулся с модификатором ref ( который, я кстати тоже думал, что знаю как работает, оказалось не знаю). вот какая проблема. и странно, что за столько времени сколько я учу уже программирования я с ней еще не встречался. ниже на скрине, два разных проекта, в одном (который отмечен плюсиком), метод ChangeType принимает значения класса Work и изменяет его, а на втором ( где минус, кстати в моих глазах это два абсолютно по структуре одинаковые проекты) МЕТОД ХОТЬ И ПРИНИМАЕТ ЗНАЧЕНИЯ НО НЕ ИЗМЕНЯЕТ ИХ!!! ВОТ Я СИЖУ и ломаю голову. почему так? как же. и там и там, два класа, один метод, все работает по одной схеме, но почему на одном из примеров метод изменяет значения переменной, а второй не изменяет?

...
Рейтинг: 0 / 0
ссылочные типы в методах
    #38911310
DimaKhodan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Чтобы вы поняли, я понимаю, что в примере с минусом, создается экземпляр объекта, который попадает в метод, с ним что-то там происходит, а после того как метод заканчивает работу данные удаляются и само собой не передаются в значения полей, которые задавались в параметрах.
Но в таком случае, почему тогда в примере с плюсиком, после окончания метода ChangeType, field изменяет свое значения?
...
Рейтинг: 0 / 0
ссылочные типы в методах
    #38911337
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DimaKhodanразобрал я тему (по крайней мере так думал) с значимыми типами и ссылочными. все как говорится, понял
Пример с плюсиком - ссылочный тип.
Второй пример - значимые типы, потому и не меняются, что передаются по значению, а не по ссылке (то есть копии переменных, а не сами переменные)

Придется перечитать учебник еще раз
...
Рейтинг: 0 / 0
ссылочные типы в методах
    #38911801
DimaKhodan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro, я так понимаю, что дело в параметрах, которые передаются в методы. да?
...
Рейтинг: 0 / 0
ссылочные типы в методах
    #38911861
Сон Веры Павловны
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.ProВторой пример - значимые типы, потому и не меняются, что передаются по значению, а не по ссылке (то есть копии переменных, а не сами переменные)
По значению передаются и ссылочные объекты тоже - по значению передается сама ссылка. И поэтому не получится модифицировать саму ссылку. А с ref/out - вполне получится:
Код: 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.
static void Main()
{
  var sb = new StringBuilder();
  sb.AppendLine("1");
  sb.AppendLine("2");
  Test1(sb);
  Console.WriteLine(sb); // Вывод: 1 2
  Test2(out sb);
  Console.WriteLine(sb); // Вывод: A B
}

static void Test1(StringBuilder sb)
{
  sb = new StringBuilder();
  sb.AppendLine("A");
  sb.AppendLine("B");
}

static void Test2(out StringBuilder sb)
{
  sb = new StringBuilder();
  sb.AppendLine("A");
  sb.AppendLine("B");
}

Поэтому выражение "передача параметра по ссылке/значению" в зависимости от того, что мы передаем (значимый/ссылочный тип) некорректно - тип передачи параметра определяется только наличием ref/out (по ссылке) или отсутствием (по значению) безотносительно того, что из себя представляет параметр.
...
Рейтинг: 0 / 0
ссылочные типы в методах
    #38911903
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сон Веры Павловны,

Человек спросил "почему" - я ответил. Судя по его другим вопросам, по нему плачут первые главы учебника по основам типов.
...
Рейтинг: 0 / 0
ссылочные типы в методах
    #38911912
Сон Веры Павловны
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro,

в ответе была неточность:
потому и не меняются, что передаются по значению, а не по ссылке
просто переданная по значению ссылка позволяет модифицировать состояние объекта, расположенное в куче - доп. возможность ссылочных типов. Если же по значению передается само значение, то мы не можем модифицировать вне пределов метода ничего.
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / ссылочные типы в методах
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]