|
0 / 0 / 0
Регистрация: 02.10.2011
Сообщений: 3
|
|||||||||||
Список объектов класса07.10.2013, 17:25. Показов 18201. Ответов 19
Метки нет (Все метки)
Здравствуйте)
Проблема такая. Есть класс PossibleStep, создается список объектов этого класса в другом классе
0
|
|||||||||||
| 07.10.2013, 17:25 | |
|
Ответы с готовыми решениями:
19
Массив объектов базового класса, позволяющий работать с набором объектов — чтение, вывод
|
|
53 / 53 / 16
Регистрация: 25.02.2013
Сообщений: 171
|
|
| 07.10.2013, 17:30 | |
|
они имеют одну ссылку по этому и меняются
1
|
|
|
192 / 192 / 29
Регистрация: 03.12.2009
Сообщений: 853
|
|||||||||||
| 07.10.2013, 17:30 | |||||||||||
как вариант можно сделать так:
1
|
|||||||||||
|
0 / 0 / 0
Регистрация: 02.10.2011
Сообщений: 3
|
||||||
| 07.10.2013, 17:51 [ТС] | ||||||
|
Спасибо, стало понятно в чем проблема, но решение не помогло, изменения по-прежнему происходит в обоих списках. Прямое копирование элементов одного списка в другой также не помогло
0
|
||||||
|
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
|
|
| 07.10.2013, 18:00 | |
|
Lazy Mashka, вы все равно копируете всего лишь ссылку, а не весь объект.
1
|
|
|
0 / 0 / 0
Регистрация: 02.10.2011
Сообщений: 3
|
||||||
| 07.10.2013, 18:04 [ТС] | ||||||
|
Вопрос решен, всем спасибо)
0
|
||||||
|
Master of Orion
|
|
| 07.10.2013, 19:04 | |
|
kolorotur, кстати, к вам вопрос, как к специалисту - почему в шарпе не сделали конструктор копирования? Очень удобная штука ведь. И часто её не хватает, как раз в таких случаях.
Lazy Mashka, ты можешь просто вместо class написать struct и тогда можно будет просто написать как в посте #3
0
|
|
|
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
|
||
| 07.10.2013, 20:14 | ||
![]() Ситуация та же, что с клонированием: основная причина — неоднозначность понятия "копирование" в полностью объектно-ориентированном языке. Подразумевается, что это задача разработчика — определять, что именно может являться полноценной копией разрабатываемого им класса. Ну это так же, как с понятиями равнозначность и иммутабельность: два объекта могут быть равнозначными, хотя побайтовое сравнение занимаемой ими памяти может отличаться, и объект может быть иммутабельным, даже если какие-то из его полей (скрытых от внешних глаз, как правило) и изменяются — в ООП важно то, что видно извне, а не то, что творится в "кишках" объекта. По этой же причине два объекта могут считаться точными копиями друг друга, даже если и память, ими занимаемая, различается. Вот и получается, что невозможно сделать некий универсальный метод для создания копии объекта, так как само понятие "копия" в ООП определяется отдельно для каждого типа. Кстати, разработчики всё-таки не забыли про тех, кто хочет реализовать клонирование/копирование "наивным" методом, но не хочет ручками набивать "this.a = other.a; this.b = other.b": имеется защищенный метод MemberwiseClone, который, по сути, тупо копирует память, занимаемую объектом. А всякие "нюансы" уже потом можно ручками подрихтовать.
1
|
||
|
Master of Orion
|
||
| 07.10.2013, 20:20 | ||
|
kolorotur, для меня копирование - это копирование всех полей. Не уверен, но вроде нагуглил, что object.MemrerwhiseClone это и делает. Если так - то вопрос снимается: в шарпе есть конструктор копирования, просто он замаскирован под метод основного класса.
Добавлено через 1 минуту
0
|
||
|
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
|
|||
| 08.10.2013, 11:12 | |||
![]() Вот пишите вы, допустим, на шарпе какую-нибудь виртуальную машину наподобие CLR, где каждая из ваших базовых единиц (в CLR — объект) состоит из шапки, представленной несколькими полями. Одно из этих полей — блок синхронизации типа int, который при захвате увеличивается, а при освобождении уменьшается. Если значение равно нулю, то объект свободен, если нет, то объект залочен количеством потоков, равным значению этого поля. Его значение при копировании тоже копировать будем? Ведь если в этот момент его значение не равно нулю, то любая попытка произвести на нем синхронизацию приведет к взаимной блокировке (она же deadlock), т.к. никакой другой поток эту новую копию объекта не захватывал, а следовательно никогда и не освободит. ![]() Держитесь!
1
|
|||
|
Master of Orion
|
|||
| 08.10.2013, 14:10 | |||
|
0
|
|||
|
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
|
|||
| 08.10.2013, 14:42 | |||
|
0
|
|||
|
192 / 192 / 29
Регистрация: 03.12.2009
Сообщений: 853
|
|||||||
| 08.10.2013, 15:52 | |||||||
0
|
|||||||
|
Администратор
|
|
| 08.10.2013, 16:11 | |
|
da1z, steps - это List<T>, а лист реализует интерфейс IEnumerable<T>, а значит по нему можно пробегать с помощью foreach. Преобразование в массив излишне.
0
|
|
|
192 / 192 / 29
Регистрация: 03.12.2009
Сообщений: 853
|
|
| 08.10.2013, 16:20 | |
|
Это для того чтобы элементы скопировались, а не ссылки.
0
|
|
|
Администратор
|
|
| 08.10.2013, 16:43 | |
|
da1z, тогда и в массиве будут ссылки, ведь массив - ссылочный тип.
0
|
|
|
192 / 192 / 29
Регистрация: 03.12.2009
Сообщений: 853
|
|
| 08.10.2013, 17:07 | |
|
Точно, что-то я ступил
0
|
|
| 08.10.2013, 17:07 | |
|
Помогаю со студенческими работами здесь
20
Коллекция объектов одного класса в экземпляре другого класса
Поле класса содержит массив объектов другого класса
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
|
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога
Финальные проекты на Си и на C++:
hello-sdl3-c. zip
hello-sdl3-cpp. zip
Результат:
|
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога
MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
|
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд.
Даже если у вас. . .
|
|
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает
монорепозиторий в котором находятся все исходники.
При создании нового решения, мы просто добавляем нужные проекты
и имеем. . .
|
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение:
В этой книге («Подход, основанный на вариантах использования») Ивар утверждает,
что архитектура программного обеспечения — это
структуры,. . .
|
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога
Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
|
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога
Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip
На первой гифке отладочные линии отключены, а на второй включены:. . .
|