|
2 / 2 / 2
Регистрация: 18.08.2011
Сообщений: 51
|
||||||
Изменить значения в структуре15.02.2013, 17:02. Показов 11924. Ответов 35
Метки нет (Все метки)
Как изменять значения в структуре?
0
|
||||||
| 15.02.2013, 17:02 | |
|
Ответы с готовыми решениями:
35
Как изменить все элементы в структуре одним действием Изменение значения в структуре Изменить программу так, чтобы вторая строка в динамической структуре затиралась |
|
136 / 138 / 18
Регистрация: 26.07.2010
Сообщений: 911
|
|
| 15.02.2013, 17:04 | |
|
Можно сначала вопрос?
Зачем вы засунули структуру в класс?
0
|
|
|
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
|
||||||||
| 15.02.2013, 17:08 | ||||||||
0
|
||||||||
|
136 / 138 / 18
Регистрация: 26.07.2010
Сообщений: 911
|
||
| 15.02.2013, 17:15 | ||
|
Эта структура описана в классе, т.е. тут она должна будет находиться уже не в стеке а в куче.
Т.е. будет ссылочной, а не вещественной. Я не понимаю зачем. Добавлено через 3 минуты
0
|
||
|
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
|
|
| 15.02.2013, 17:16 | |
|
1
|
|
|
136 / 138 / 18
Регистрация: 26.07.2010
Сообщений: 911
|
|
| 15.02.2013, 17:18 | |
|
0
|
|
|
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
|
|||
| 15.02.2013, 17:38 | |||
|
1. Факт нахождения структуры в куче не отменяет того, что это значимый тип, копирующийся при извлечении из списка. 2. При описании любого типа никакой объект не создается, не важно - структура это или класс.
1
|
|||
|
136 / 138 / 18
Регистрация: 26.07.2010
Сообщений: 911
|
||||||
| 15.02.2013, 17:59 | ||||||
|
Абсолютно не верные утверждения. Посмотрите пожалуйста описание упаковки и распаковки.
Структура в коде ниже только создается в стеке, после она упаковывается и ссылка на нее помещается в список.
вложенные типы При создании объекта-типа(не объекта) MyClass с описанием статических методов сразу же создастся объект-тип структуры. Это не плохо, я просто не понимаю зачем? Добавлено через 4 минуты Точнее это не плохо вообще, но тут это плохо.
0
|
||||||
|
Темная сторона .Net
592 / 489 / 39
Регистрация: 21.07.2012
Сообщений: 1,668
|
|
| 15.02.2013, 18:22 | |
|
n1l, Скомпилируйте код выше и покажите упаковку\распаковку,я лично в ILе ее не нашел.
0
|
|
|
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
|
||||||||||||||
| 15.02.2013, 18:25 | ||||||||||||||
|
Я, на всякий случай, говорю про объявление: не важно, где объявлен тип, внутри класса или сразу в неймспейсе - это никак не влияет на то, где будет выделяться под него память. Ну и упаковки никакой, конечно же, не будет, ибо это обощенный тип. Если бы был ArrayList или List<object>, то да, имела бы место упаковка. Структура - не ссылочный тип, в данном случае хранится не в упакованном виде, а значит ссылки на нее не может быть в принципе. Следовательно, при любой попытке извлечь этот экземпляр из списка, вы будете извлекать всю копию структуры.
Я прекрасно знаком с вложенными типами. Тип - да, будет создан, со всеми его статическими полями и с запуском статического конструктора, с этим никто и не спорил. Но какое отношение местоположение типа имеет к тому, где будет создан экземпляр этого типа? Или я что-то не так понял? Из приведенного куска кода это, конечно же, не видно. Добавлено через 19 секунд
1
|
||||||||||||||
|
136 / 138 / 18
Регистрация: 26.07.2010
Сообщений: 911
|
|||||||||||||||||||
| 15.02.2013, 18:57 | |||||||||||||||||||
|
Ах, ну да. Это же generik от структуры, он оптимизирован и потому вызывать упаковку не будет.
Но данные будут храниться в куче, это точно. А раз так, тогда структура тут не нужна, тем более вложенная в класс. Добавлено через 9 минут Список - ссылочный тип, и все его элементы тоже ссылочные типы. Это все равно что объявить класс так:
Добавлено через 3 минуты Ну конечно же, вы же сначала копируете значение переменной, в структуру в стеке.
Ээээ, упс.
0
|
|||||||||||||||||||
|
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
|
||||||||||||||
| 15.02.2013, 19:11 | ||||||||||||||
|
Я - про второй вариант.
Внесу ясность: массив - ссылочный тип, память под него выделяется в куче. Но вот если элементы массива - структуры, то в памяти они все равно хранятся как структуры, хоть и в куче. То есть никакой упаковки/распаковки.
1
|
||||||||||||||
|
136 / 138 / 18
Регистрация: 26.07.2010
Сообщений: 911
|
||||||||||||||
| 15.02.2013, 19:28 | ||||||||||||||
|
Вот что меня запутало.
![]()
Добавлено через 2 минуты
Добавлено через 5 минут Я теряюсь в догадках, но никак не могу понять, почему если определить список List<int> lst = new List<int>{1,2,3} То при вызове List[0] мы можем работать с оригиналом, а в структуре написанной выше нет. Вроде бы практически одинаковый generik. Хотя может бытьв list<int> используется ref.
0
|
||||||||||||||
|
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
|
||||
| 15.02.2013, 19:30 | ||||
|
Главное, что прояснили этот момент ![]() Когда писал ответ, в голове у меня крутилось слово "свойство". Добавлено через 1 минуту У инта нет каких-то свойств, чтобы явно определить - копия это или не копия. Но могу вас заверить: при работе с классом List, хранящим структуры, обращение по индексу всегда возвращает копию, пусть это будет пользовательский тип или тот же инт.
1
|
||||
|
136 / 138 / 18
Регистрация: 26.07.2010
Сообщений: 911
|
|
| 15.02.2013, 19:30 | |
|
Спасибо, что прояснили для меня некоторые моменты.
Все таки хотелось бы разобраться полностью с этим.
0
|
|
|
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
|
|
| 15.02.2013, 19:31 | |
|
0
|
|
|
136 / 138 / 18
Регистрация: 26.07.2010
Сообщений: 911
|
||
| 15.02.2013, 19:33 | ||
|
Ну конечно не всегда удается просмотреть, потому иногда доверяюсь опыту полученному ранее.
0
|
||
|
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
|
||
| 15.02.2013, 19:34 | ||
|
Он же вроде как не отображает факт копирования/упаковки/распаковки.
0
|
||
|
136 / 138 / 18
Регистрация: 26.07.2010
Сообщений: 911
|
|||
| 15.02.2013, 19:42 | |||
|
Добавлено через 2 минуты
0
|
|||
|
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
|
|||
| 15.02.2013, 19:44 | |||
|
Поэтому их не рекомендуется использовать, если планируется, что экземпляры будут часто копироваться или передаваться из метода в метод - слишком много оверхеда на копирование будет приходиться. Что касается обобщений, то это применительно только к расположению структур в памяти, а от копирования при передачи в метод или возвращения из метода, к сожалению, не отделаться. Ну, если только использовать ref/out. Добавлено через 47 секунд
1
|
|||
| 15.02.2013, 19:44 | |
|
Помогаю со студенческими работами здесь
20
Как присвоить значения структуре? Присвоение значения данным в структуре Функция, которая возвращает 2 значения в структуре Не могу присовить структуре значения и записать в файл Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Вывод данных через динамический список в справочнике
Maks 01.04.2026
Реализация из решения ниже выполнена на примере нетипового справочника "Спецтехника" разработанного в конфигурации КА2.
Задача: вывести данные из ТЧ нетипового документа. . .
|
Функция заполнения текстового поля в реквизите формы документа
Maks 01.04.2026
Алгоритм из решения ниже реализован на нетиповом документе "ВыдачаОборудованияНаСпецтехнику" разработанного в конфигурации КА2, в дополнении к предыдущему решению.
На форме документа создается. . .
|
К слову об оптимизации
kumehtar 01.04.2026
Вспоминаю начало 2000-х, университет, когда я писал на Delphi. Тогда среди программистов на форумах активно обсуждали аккуратную работу с памятью: нужно было следить за переменными, вовремя. . .
|
Идея фильтра интернета (сервер = слой+фильтр).
Hrethgir 31.03.2026
Суть идеи заключается в том, чтобы запустить свой сервер, о чём я если честно мечтал давно и давно приобрёл книгу как это сделать. Но не было причин его запускать. Очумелые учёные напечатали на. . .
|
|
Модель здравосоХранения 6. ESG-повестка и устойчивое развитие; углублённый анализ кадрового бренда
anaschu 31.03.2026
В прикрепленном документе раздумья о том, как можно поменять модель в будущем
|
10 пpимет, которые всегда сбываются
Maks 31.03.2026
1. Чтобы, наконец, пришла маршрутка, надо закурить. Если сигарета последняя, маршрутка придет еще до второй затяжки даже вопреки расписанию.
2. Нaдоели зима и снег? Не надо переезжать. Достаточно. . .
|
Перемещение выделенных строк ТЧ из одного документа в другой
Maks 31.03.2026
Реализация из решения ниже выполнена на примере нетипового документа "ВыдачаОборудованияНаСпецтехнику" с единственной табличной частью "ОборудованиеИКомплектующие" разработанного в конфигурации КА2. . . .
|
Functional First Web Framework Suave
DevAlt 30.03.2026
Sauve. IO
Апнулись до NET10.
Из зависимостей один пакет, работает одинаково хорошо как в режиме проекта
так и в интерактивном режиме. из сложностей - чисто функциональный подход.
Решил. . .
|