|
Изменить массив по ссылке
|
|||
---|---|---|---|
#18+
Как в моем случае можно изменить массив, передавая его по ссылке? Код: 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. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45.
... |
|||
:
Нравится:
Не нравится:
|
|||
17.08.2015, 18:02 |
|
Изменить массив по ссылке
|
|||
---|---|---|---|
#18+
Qwe.Qwe1, А в чем цель и смысл? ... |
|||
:
Нравится:
Не нравится:
|
|||
17.08.2015, 18:17 |
|
Изменить массив по ссылке
|
|||
---|---|---|---|
#18+
Qwe.Qwe1Как в моем случае можно изменить массив, передавая его по ссылке? ты его не меняешь хочешь поменять - меняй явно ... |
|||
:
Нравится:
Не нравится:
|
|||
17.08.2015, 18:18 |
|
Изменить массив по ссылке
|
|||
---|---|---|---|
#18+
Qwe.Qwe1Как в моем случае можно изменить массив, передавая его по ссылке? Можно изменить, что-то присваивая этой ссылке. В вашем коде нигде этого нет. Вот так консольный вывод сообщит про Count: Код: 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. 25. 26. 27. 28. 29. 30.
- найдите 10 отличий, и разберитесь, что и зачем тут было изменено. Но, как выше было сказано, в этом нет смысла - массивы сами по себе являются ссылочным типом, и вполне изменяются при обычной передаче ссылки на массив: Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15.
... |
|||
:
Нравится:
Не нравится:
|
|||
18.08.2015, 06:06 |
|
Изменить массив по ссылке
|
|||
---|---|---|---|
#18+
В общем и целом мне все понятно. Особенно, когда мы в метод передаем массив (ключевое здесь - по значению) и в этом же методе его меняем. То есть, что по ссылке, что по значению - для массива все одно. В моем случае есть одно отличие: я передаю массив объекту (в конструкторе) для анализа, а в другом методе этот ранее переданный массив я хочу поменять. Например: создаю форму с ListBox и передаю номера строк, которые надо выделить. А возвращать по ОК хочу выбранные пользователем строки. Cделал через public свойство (в конструкторе присваиваю, потом его анализирую, потом в него же записываю результат и после уже (условно - после закрытия формы) - считываю результат. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.08.2015, 09:45 |
|
Изменить массив по ссылке
|
|||
---|---|---|---|
#18+
Qwe.Qwe1То есть, что по ссылке, что по значению - для массива все одно. Передавая по ссылке, ты ее можешь изменить в вызываемом методе (myref = new int[]), и тогда она же изменится в вызывающем методе ... |
|||
:
Нравится:
Не нравится:
|
|||
18.08.2015, 10:41 |
|
Изменить массив по ссылке
|
|||
---|---|---|---|
#18+
Сон Веры Павловны Код: c# 1. 2. 3. 4. 5. 6.
А так? Код: c# 1. 2. 3. 4. 5. 6. 7. 8.
На самом деле передается не ссылка на массив, а ссылка на ссылку на массив. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.08.2015, 17:13 |
|
Изменить массив по ссылке
|
|||
---|---|---|---|
#18+
ЕвгенийВА так? Это ко мне вопрос? Я как бы в курсе, чем отличается передача ссылки по значению, и ссылке по ссылке. И Рихтера даже читал. И поэтому на вопрос "Чем отличаются структуры от классов?" избегаю популярной формулировки "Структуры передаются по значению, а классы по ссылке". ЕвгенийВНа самом деле передается не ссылка на массив, а ссылка на ссылку на массив. В вашем постинге выше именно передается ссылка по значению. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.08.2015, 04:55 |
|
Изменить массив по ссылке
|
|||
---|---|---|---|
#18+
Сон Веры Павловны И Рихтера даже читал. И поэтому на вопрос "Чем отличаются структуры от классов?" избегаю популярной формулировки "Структуры передаются по значению, а классы по ссылке". А правда чем? Внятного ответа я не слышал ни разу, не от толстеющих бородатых чуваков, работающих архитекторами, не от прыщавых джуниоров..... ... |
|||
:
Нравится:
Не нравится:
|
|||
19.08.2015, 07:59 |
|
Изменить массив по ссылке
|
|||
---|---|---|---|
#18+
Структуры - в стеке, классы - в куче (поправляет растянутый на коленях свитер, расчесывает бороду) ... |
|||
:
Нравится:
Не нравится:
|
|||
19.08.2015, 08:29 |
|
Изменить массив по ссылке
|
|||
---|---|---|---|
#18+
Полный и развернутый ответ потянет по объему как минимум на главу из того же Рихтера. Можно коротко и навскидку перечислить основные отличия: например, для локальных переменные значимого типа память выделяется на стеке, а ссылочного - в куче, а на стеке хранится ссылка в кучу на состояние этой локальной переменной (слово "локальная" относительно значимых типов здесь ключевое). Или что все значимые типы унаследованы от System.ValueType, и что все они неявно изолированные (sealed). Итд итп. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.08.2015, 08:29 |
|
Изменить массив по ссылке
|
|||
---|---|---|---|
#18+
Сон Веры ПавловныПолный и развернутый ответ потянет по объему как минимум на главу из того же Рихтера. Можно коротко и навскидку перечислить основные отличия: например, для локальных переменные значимого типа память выделяется на стеке, а ссылочного - в куче, а на стеке хранится ссылка в кучу на состояние этой локальной переменной (слово "локальная" относительно значимых типов здесь ключевое). Или что все значимые типы унаследованы от System.ValueType, и что все они неявно изолированные (sealed). Итд итп. Это все следствие, но не причина. Развернутый и полный ответ потянет на 5-7 строчек.... ... |
|||
:
Нравится:
Не нравится:
|
|||
19.08.2015, 08:43 |
|
Изменить массив по ссылке
|
|||
---|---|---|---|
#18+
ЕвгенийВЭто все следствие, но не причина. Причина почему локальный int не лежит в стеке (кроме боксинга)? Ну так тогда GC зашьется в работе ... |
|||
:
Нравится:
Не нравится:
|
|||
19.08.2015, 08:46 |
|
Изменить массив по ссылке
|
|||
---|---|---|---|
#18+
PallarisЕвгенийВЭто все следствие, но не причина. Причина почему локальный int не лежит в стеке (кроме боксинга)? Ну так тогда GC зашьется в работе Он еще может не лежать в стеке, если например является полем класса или в составе массива int[]. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.08.2015, 08:49 |
|
Изменить массив по ссылке
|
|||
---|---|---|---|
#18+
ЕвгенийВОн еще может не лежать в стеке, если например является полем класса или в составе массива int[]. Ну да, я так и написал - локальный int. Впрочем, что бы было, если б ничего не хранилось в стеке? Ну, тогда абсолютно все лежало бы в куче: Код: c# 1. 2.
Такая полезная фича, как передача по значению (т.е. копирование) и как следствие - неизменность оригинала - тоже потребовала костылей Код: c# 1. 2. 3. 4. 5. 6. 7.
Что еще? ... |
|||
:
Нравится:
Не нравится:
|
|||
19.08.2015, 08:54 |
|
Изменить массив по ссылке
|
|||
---|---|---|---|
#18+
ЕвгенийВЭто все следствие, но не причина. Развернутый и полный ответ потянет на 5-7 строчек.... Причина чего? Я как бы выше формулировал вопрос паро отличия, а не про причины/следствия. Ну, и как бы вы действительно считаете, что всё перечисленное - следствия (чего)? И место расположения в методе - тоже следствие? ... |
|||
:
Нравится:
Не нравится:
|
|||
19.08.2015, 08:57 |
|
|
start [/forum/topic.php?fid=20&msg=39032039&tid=1401271]: |
0ms |
get settings: |
20ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
37ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
53ms |
get tp. blocked users: |
1ms |
others: | 315ms |
total: | 460ms |
0 / 0 |