|
вопрос про изменение полей упакованной структуры
|
|||
---|---|---|---|
#18+
Читаю Рихтера CLR via C# В главе про значимые типы на примере структуры рассматривается пример изменения полей упакованной структуры: создается структура, с n-Количеством полей и методом, изменяющим значения данных полей. если данная структура не упакована, при вызове метода поля будут изменены, если упаковать структуру и вызвать метод изменения приведя ссылку на структуру к структуре то в стеке создастся скрытая копия данной структуры и у этой копии произойдет изменение полей, а на изначальном объекте изменения не произойдет. для разрешения и данной ситуации предлагается применить интерфейс. Далее реализовав данный интерфейс в структуре, можно у упакованной структуры изменить значения полей. вот код: Код: 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.
появление скрытой переменной понятно, а что происходит при использовании интерфейса, это автором пропущено. при дизассемблировании появляется виртуальный вызов функции. В связи с этим вопрос: почему использование интерфейса позволяет изменить упакованную структуру, что происходит за "кулисами". заранее спасибо. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.03.2015, 09:47 |
|
вопрос про изменение полей упакованной структуры
|
|||
---|---|---|---|
#18+
Алексей, Потому что интерфейс это всегда объекты а структуры значения. Ты замарал эту мышь интерфейсом и можешь запизд..ть этот объект хоть куда. На том конце, в общем то пох..й что послужило прототипом, главное что это чудо реализует скабрезные методэ ... |
|||
:
Нравится:
Не нравится:
|
|||
20.03.2015, 10:18 |
|
вопрос про изменение полей упакованной структуры
|
|||
---|---|---|---|
#18+
Алексей, виртуальный вызов функции. - это то тут причем, это из другой оперы, вам ешо рано.. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.03.2015, 10:20 |
|
вопрос про изменение полей упакованной структуры
|
|||
---|---|---|---|
#18+
Где-то в степи, Меня интересует именно обратная сторона: что происходит когда через интерфейс вызывается метод упакованной структуры, и как изменяются поля структуры. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.03.2015, 10:48 |
|
вопрос про изменение полей упакованной структуры
|
|||
---|---|---|---|
#18+
Где-то в степи, инструкция callvirt присутствует в дизасемблированном коде данного примера ... |
|||
:
Нравится:
Не нравится:
|
|||
20.03.2015, 10:49 |
|
вопрос про изменение полей упакованной структуры
|
|||
---|---|---|---|
#18+
Алексей, что происходит когда через интерфейс вызывается метод упакованной структуры - если сможете через интерфейс не упакованной. я сниму шляпу гы ... |
|||
:
Нравится:
Не нравится:
|
|||
20.03.2015, 10:58 |
|
вопрос про изменение полей упакованной структуры
|
|||
---|---|---|---|
#18+
Где-то в степи, Смешно ... |
|||
:
Нравится:
Не нравится:
|
|||
20.03.2015, 11:08 |
|
вопрос про изменение полей упакованной структуры
|
|||
---|---|---|---|
#18+
Алексей, а так попробуйте Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12.
... |
|||
:
Нравится:
Не нравится:
|
|||
20.03.2015, 11:27 |
|
вопрос про изменение полей упакованной структуры
|
|||
---|---|---|---|
#18+
Алексей...почему использование интерфейса позволяет изменить упакованную структуру... Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16.
А что изменилось то? ... |
|||
:
Нравится:
Не нравится:
|
|||
20.03.2015, 11:32 |
|
вопрос про изменение полей упакованной структуры
|
|||
---|---|---|---|
#18+
Где-то в степи, Я понял, я непонятно задаю вопросы :( Мне интересно что там за "кулисами" происходит В примере по значимому типу (в книге имеется ввиду) все расписано отлично. А вот про интерфейс нет По аналогии с значимым типом (создается экземпляр типа point на стеке, затем метод Change его изменяет, при приведении происходит распаковка и т.д. и т.п.) что происходит когда данная ситуация разрешается при помощи интерфейса, что происходит с полями? их значения копируются в стек или изменения происходят в куче, вот что мне нужно узнать..... ... |
|||
:
Нравится:
Не нравится:
|
|||
20.03.2015, 12:01 |
|
вопрос про изменение полей упакованной структуры
|
|||
---|---|---|---|
#18+
Sergey TSV, Должно измениться значение поля m_x методом change ... |
|||
:
Нравится:
Не нравится:
|
|||
20.03.2015, 12:02 |
|
вопрос про изменение полей упакованной структуры
|
|||
---|---|---|---|
#18+
АлексейSergey TSV, Должно измениться значение поля m_x методом change А оно изменилось? По-моему, вы не правильно поняли Рихтера, перечитайте более внимательно. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.03.2015, 12:07 |
|
вопрос про изменение полей упакованной структуры
|
|||
---|---|---|---|
#18+
Sergey TSV, а разве нет? (у вас в комментариях значения проставлены) ... |
|||
:
Нравится:
Не нравится:
|
|||
20.03.2015, 12:12 |
|
вопрос про изменение полей упакованной структуры
|
|||
---|---|---|---|
#18+
Алексейа разве нет? (у вас в комментариях значения проставлены) Наверное я не так вопрос понял… Упаковка здесь не производится , поскольку тип o уже упакован. Затем вызывается метод Change, который изменяет поля m_x упакованного типа Point. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.03.2015, 12:27 |
|
вопрос про изменение полей упакованной структуры
|
|||
---|---|---|---|
#18+
Sergey TSV, Совершенно верно Что происходит дальше? Значения полей меняются непосредственно в куче? Или копии выносятся на стек? Если на стек, потом происходит обратно упаковка? ... |
|||
:
Нравится:
Не нравится:
|
|||
20.03.2015, 12:30 |
|
вопрос про изменение полей упакованной структуры
|
|||
---|---|---|---|
#18+
Алексей, Только в куче у объекта о. Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16.
... |
|||
:
Нравится:
Не нравится:
|
|||
20.03.2015, 12:33 |
|
|
start [/forum/topic.php?fid=20&fpage=91&tid=1401780]: |
0ms |
get settings: |
8ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
27ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
57ms |
get tp. blocked users: |
2ms |
others: | 401ms |
total: | 527ms |
0 / 0 |