|
9 / 6 / 3
Регистрация: 10.01.2020
Сообщений: 330
|
||||||||||||||||
.NET 4.x Обновлять ссылочный объект принятый через конструктор04.02.2023, 12:21. Показов 1167. Ответов 20
Метки нет (Все метки)
Добрый всем!
Не знаю как правильно сформулировать, покажу на примере. Есть 2 класса
Как сделать так, чтобы при пересоздании one внутри two так же был новый объект? Без необходимости передачи one в two.Update(one) или без пересоздания самого two = new Two(one)? Может можно сделать как-то, чтобы класс Two следил за этим, и при пересоздании, обновлял объект на новый?
0
|
||||||||||||||||
| 04.02.2023, 12:21 | |
|
Ответы с готовыми решениями:
20
Как инициализировать указатель на объект через конструктор? Как передать объект ArrayList через конструктор
|
|
4694 / 2702 / 734
Регистрация: 02.08.2011
Сообщений: 7,233
|
||
| 04.02.2023, 12:32 | ||
|
Для чего это понадобилось?
0
|
||
|
9 / 6 / 3
Регистрация: 10.01.2020
Сообщений: 330
|
||
| 04.02.2023, 12:42 [ТС] | ||
|
Этот объект остаётся мусором, не подключённым к внешней программой. Отследить создание объекта можно, но пересоздавать все классы, которые его используют нельзя, так как в них хранится много состояний и данных.
0
|
||
|
4694 / 2702 / 734
Регистрация: 02.08.2011
Сообщений: 7,233
|
|||
| 04.02.2023, 12:58 | |||
|
И в Two.One сохранял бы ссылку на синглтон. Никогда его не пересоздавая, разумеется. Добавлено через 3 минуты Добавлено через 8 минут По-хорошему уведомления делаются через события, и в классе-подписчике можно обновлять ссылку, указывая на вновь созданный объект. Но выглядит это как неоптимальный костыльный хак. Просто ненужные/нерациональные затраты процессорного времени для решения проблемы.
1
|
|||
|
9 / 6 / 3
Регистрация: 10.01.2020
Сообщений: 330
|
||||
| 04.02.2023, 13:13 [ТС] | ||||
|
На примере кода выше. `one` я не могу никак сделать синглтоном, так как не имею к этому доступа. Класс One это и есть класс внешней программы, я не создаю объект `one`, мне его предоставляет уже готовым программа. Класс Two это уже мой. Но в классе Two ещё создаются Three и Four и в них тоже попадает этот объект `one` через конструктор. Это по сути и является ответом на Есть мысль но не знаю как реализовать. Допустим при изменении `one` я обновлю в Two `two.Update(one)`, но как сделать так, чтобы остальные Three и Four отследили обновление объекта в two после (`two.Update(one)`), и тоже обновились? Добавлено через 11 минут
0
|
||||
|
4694 / 2702 / 734
Регистрация: 02.08.2011
Сообщений: 7,233
|
||||||||||||
| 04.02.2023, 13:32 | ||||||||||||
Вызывать метод перед другим критичным поведением, то есть там, где важно иметь актуальную версию. Добавлено через 14 минут можно прямо объявить нашу внутреннюю кухню с костылями и никому ее не показывать (internal): ![]()
1
|
||||||||||||
|
9 / 6 / 3
Регистрация: 10.01.2020
Сообщений: 330
|
||||||
| 04.02.2023, 13:54 [ТС] | ||||||
|
IamRain, а под синглтоном вы не такое имели в виду?
0
|
||||||
|
4694 / 2702 / 734
Регистрация: 02.08.2011
Сообщений: 7,233
|
||||||
| 04.02.2023, 14:00 | ||||||
|
BeginnerCoderCS, синглтон - это строго один объект в приложении (паттерн проектирования - одиночка)
0
|
||||||
|
23 / 16 / 7
Регистрация: 03.02.2023
Сообщений: 93
|
|
| 04.02.2023, 14:08 | |
|
Вставлю свои пять копеек, может поможет
![]() Может прозвучит глупо... А сделать свой класс One one который будет отслеживать изменения и меняться сам, и пусть все остальные ссылаются уже на него. Тут можно будет уже и делегаты впихнуть и еще чего придумать... Эдакую прослойку... Добавлено через 1 минуту У него я так понял нету доступа к классу One, только как результат.
1
|
|
|
9 / 6 / 3
Регистрация: 10.01.2020
Сообщений: 330
|
||||||||
| 04.02.2023, 15:00 [ТС] | ||||||||
|
То есть у меня вот такой объект IOne one, даже реализацию One не знаю. Есть методы что делает one и его интерфейс IOne.
0
|
||||||||
|
Модератор
|
||
| 04.02.2023, 15:28 | ||
|
Вы или переоцениваете свои возможности по отслеживанию создания экземпляров, либо не предоставили существенную для решения вопроса информацию.
0
|
||
|
23 / 16 / 7
Регистрация: 03.02.2023
Сообщений: 93
|
|
| 04.02.2023, 15:36 | |
|
Примерно так, только в каком месте идет отслеживание изменений в объекте IOne.
У вас есть метод Update(IOne one) но когда он должен срабатывать? Если конечно оно есть "за кадром" то ладно
0
|
|
|
9 / 6 / 3
Регистрация: 10.01.2020
Сообщений: 330
|
||||||||
| 04.02.2023, 16:22 [ТС] | ||||||||
|
Если имели дело с контроллерами (esp, arduino) там setup и loop, то это похожая реализация. Несколько объектов таких как one и container есть всегда, и меняться они в принципе не должны, но выходит что бывает и такое. Только с помощью этого костыля с контейнером удалось понять почему оно не работает.
p.s. Эта информация как по мне лишняя, так как создаст не ответы, а доп. вопросы, на которые я ответить не смогу даже при желании, поэтому и не говорил. Но теперь упрощённая модель есть )
0
|
||||||||
|
14303 / 9388 / 1354
Регистрация: 21.01.2016
Сообщений: 35,398
|
|
| 04.02.2023, 16:39 | |
|
0
|
|
|
9 / 6 / 3
Регистрация: 10.01.2020
Сообщений: 330
|
|
| 04.02.2023, 16:42 [ТС] | |
|
0
|
|
|
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
|
||
| 04.02.2023, 17:44 | ||
|
Кто создает экземпляр класса Two и где этот кто-то берет ссылку на One для его создания?
0
|
||
|
9 / 6 / 3
Регистрация: 10.01.2020
Сообщений: 330
|
|||||||
| 05.02.2023, 00:42 [ТС] | |||||||
|
Представьте что void setup() - одноразовое выполнение при старте, и void loop() бесконечный цикл типа while(true), и несколько объектов в том числе и "one" уже есть в этом окружении. Поэтому и не хотел это описывать. Но после вопросов, я надеюсь будут рекомендации. Пусть даже на будущее. ![]() Что так нельзя делать - я понял. Если буду делать, то таких ошибок постараюсь не совершать. НО сейчас нужно именно в таком окружении работать, и если есть возможности как-то красивее/правильнее из этого выйти, то я весь во внимании ![]() Добавлено через 2 минуты В переводе на C# NET это
0
|
|||||||
|
Модератор
|
||
| 05.02.2023, 01:28 | ||
container["one"].Value - это текущий сохранённый экземпляр.А one это переменная в которую поступает новый экземпляр?Как он поступает? По событию? Или ещё как-то? Цикл все сделали, насколько понял, для детекции нового экземпляра в переменной one.Но почему не обновлять two сразу при изменении one?
0
|
||
|
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
|
||
| 05.02.2023, 01:43 | ||
|
Плюс вы же сами написали, что это костыль. Зачем нам костыли?
0
|
||
|
9 / 6 / 3
Регистрация: 10.01.2020
Сообщений: 330
|
||||||
| 05.02.2023, 02:05 [ТС] | ||||||
|
Например как ниже, функции pinMode, digitalWrite, delay уже существуют, как и некоторые объекты такие как `one`. Они есть всегда, их можно использовать, но инициализировать или пересоздавать нельзя. https://docs.arduino.cc/built-... sics/Blink
0
|
||||||
| 05.02.2023, 02:05 | |
|
Помогаю со студенческими работами здесь
20
Как передавать значения строкового типа в конструктор через объект класса?
Почему когда возвращается об'єкт создается новая копия но она создается через конструктор а не через конструктор копии? Как сделать проверку на действие: добавлять объект или обновлять Получение значения массива через ссылочный индекс Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ВВЕДЕНИЕ
Выполняя задание на управление насосной группой заполнения резервуара,. . .
|
делаю науч статью по влиянию грибов на сукцессию
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-код на мобильном. Вращайте камеру одним пальцем,. . .
|