|
ссылочные типы в методах
|
|||
---|---|---|---|
#18+
разобрал я тему (по крайней мере так думал) с значимыми типами и ссылочными. все как говорится, понял, да. все работает. но вдруг столкнулся с модификатором ref ( который, я кстати тоже думал, что знаю как работает, оказалось не знаю). вот какая проблема. и странно, что за столько времени сколько я учу уже программирования я с ней еще не встречался. ниже на скрине, два разных проекта, в одном (который отмечен плюсиком), метод ChangeType принимает значения класса Work и изменяет его, а на втором ( где минус, кстати в моих глазах это два абсолютно по структуре одинаковые проекты) МЕТОД ХОТЬ И ПРИНИМАЕТ ЗНАЧЕНИЯ НО НЕ ИЗМЕНЯЕТ ИХ!!! ВОТ Я СИЖУ и ломаю голову. почему так? как же. и там и там, два класа, один метод, все работает по одной схеме, но почему на одном из примеров метод изменяет значения переменной, а второй не изменяет? ... |
|||
:
Нравится:
Не нравится:
|
|||
20.03.2015, 16:20 |
|
ссылочные типы в методах
|
|||
---|---|---|---|
#18+
Чтобы вы поняли, я понимаю, что в примере с минусом, создается экземпляр объекта, который попадает в метод, с ним что-то там происходит, а после того как метод заканчивает работу данные удаляются и само собой не передаются в значения полей, которые задавались в параметрах. Но в таком случае, почему тогда в примере с плюсиком, после окончания метода ChangeType, field изменяет свое значения? ... |
|||
:
Нравится:
Не нравится:
|
|||
20.03.2015, 16:24 |
|
ссылочные типы в методах
|
|||
---|---|---|---|
#18+
DimaKhodanразобрал я тему (по крайней мере так думал) с значимыми типами и ссылочными. все как говорится, понял Пример с плюсиком - ссылочный тип. Второй пример - значимые типы, потому и не меняются, что передаются по значению, а не по ссылке (то есть копии переменных, а не сами переменные) Придется перечитать учебник еще раз ... |
|||
:
Нравится:
Не нравится:
|
|||
20.03.2015, 16:41 |
|
ссылочные типы в методах
|
|||
---|---|---|---|
#18+
Shocker.Pro, я так понимаю, что дело в параметрах, которые передаются в методы. да? ... |
|||
:
Нравится:
Не нравится:
|
|||
21.03.2015, 10:35 |
|
ссылочные типы в методах
|
|||
---|---|---|---|
#18+
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.
Поэтому выражение "передача параметра по ссылке/значению" в зависимости от того, что мы передаем (значимый/ссылочный тип) некорректно - тип передачи параметра определяется только наличием ref/out (по ссылке) или отсутствием (по значению) безотносительно того, что из себя представляет параметр. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.03.2015, 12:26 |
|
ссылочные типы в методах
|
|||
---|---|---|---|
#18+
Сон Веры Павловны, Человек спросил "почему" - я ответил. Судя по его другим вопросам, по нему плачут первые главы учебника по основам типов. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.03.2015, 13:23 |
|
ссылочные типы в методах
|
|||
---|---|---|---|
#18+
Shocker.Pro, в ответе была неточность: потому и не меняются, что передаются по значению, а не по ссылке просто переданная по значению ссылка позволяет модифицировать состояние объекта, расположенное в куче - доп. возможность ссылочных типов. Если же по значению передается само значение, то мы не можем модифицировать вне пределов метода ничего. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.03.2015, 13:33 |
|
|
start [/forum/topic.php?fid=20&fpage=91&tid=1401775]: |
0ms |
get settings: |
9ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
30ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
47ms |
get tp. blocked users: |
2ms |
others: | 12ms |
total: | 133ms |
0 / 0 |