|
1 / 1 / 0
Регистрация: 17.09.2024
Сообщений: 3
|
||||||
Ссылка на значимый тип и доступ для чтения17.09.2024, 13:42. Показов 717. Ответов 8
Метки нет (Все метки)
Добрый день товарищи, помогите решить одну проблемку.
Есть два класса Sensor и Connector, упрощенно они выглядят так:
Другими словами экземпляр класса Сonnector должен осуществлять доступ для чтения к Value для всех желающих, но менять значение Value должен только экземпляр Sensor у которого есть на него ссылка. Надеюсь объяснил понятно) П.С. Вынести само свойство bool HasTarget в Sensor можно и тогда к нему будет доступ изнутри Sensor, но тогда надо заставить Сonnector транслировать его наружу для чтения(потому что основная задача класса Сonnector соединяться с теми кому его как раз нужно передать). Но как сделать ссылку на значимый тип тогда? В общем прошу помощи...
0
|
||||||
| 17.09.2024, 13:42 | |
|
Ответы с готовыми решениями:
8
Как определить ссылку на значимый тип Когда следует использовать значимый тип, а когда ссылочный?
|
|
4693 / 2701 / 734
Регистрация: 02.08.2011
Сообщений: 7,228
|
|||||||||||||
| 17.09.2024, 14:09 | |||||||||||||
|
Добавлено через 1 минуту Помимо основных существуют гибридные модификаторы доступа: 1. protected internal 2. private protected Если в одной сборке, то вам поможет первый модификатор. Добавлено через 1 минуту Если вы разрабатываете какой-то функционал, и знаете как работать с типами в вашей сборке правильно, то нет ничего страшного открывать доступ к членам внутри текущей сборки. Здесь вы берете как бы ответственность на себя. Добавлено через 22 секунды
По той же схеме можно объявить свой internal interface, доступный только внутри текущей сборки. И заставить коннектор реализовать его, для мутации своего состояния. А Sensor будет принимать ссылку на этот интерфейс. Добавлено через 10 минут
1
|
|||||||||||||
|
|
||||||
| 17.09.2024, 16:08 | ||||||
|
Ну, можно такой финт ушами, но хотелось бы понимать "зачем". Если закрываете внутри либы -- достаточно internal.
P.S. интересно, есть ли смысл просить разрабов языка вводить out\ref для конструкторов.... Добавлено через 3 минуты p.p.s. вообще kolorotur (или кто-то из местных) когда-то создавал тему с примерами как это делать, но я естественно ничего не запомнил и как-то не сохранил линк на неё....
1
|
||||||
|
1 / 1 / 0
Регистрация: 17.09.2024
Сообщений: 3
|
||||||||||||||||||
| 18.09.2024, 12:53 [ТС] | ||||||||||||||||||
|
Я вот думал-думал и пока такое придумал, вроде бы работает, но не точно) 1. Добавил класс ValueContainer что бы иметь возможность ссылаться на значимые типы
П.С. для чего вообще это все, Sensor это тестовая деталь, Connector соединение между деталями для передачи сигналов
1
|
||||||||||||||||||
|
4693 / 2701 / 734
Регистрация: 02.08.2011
Сообщений: 7,228
|
|
| 18.09.2024, 13:31 | |
|
GlaM4X, пойдет. Вполне себе работающее решение.
Добавлено через 2 минуты Главное, чтобы ссылка на ValueContainer<bool> была только у экземпляра Sensor.
0
|
|
|
|
||
| 18.09.2024, 13:46 | ||
|
Но лично меня смущает сам объект Сonnector -- он только имеет состояние Value? Если да -- он бессмысленный. Правильнее будет просто создать интерфейс IConnector, который имеет свойство только для чтения, и реализовать его в Sensor. Это в свою очередь решит вопрос производительности, т.к. будете работать напряму, а не через посредника.
0
|
||
|
4693 / 2701 / 734
Регистрация: 02.08.2011
Сообщений: 7,228
|
|||
| 18.09.2024, 13:50 | |||
|
0
|
|||
|
1 / 1 / 0
Регистрация: 17.09.2024
Сообщений: 3
|
||||||||||||
| 18.09.2024, 14:19 [ТС] | ||||||||||||
0
|
||||||||||||
|
|
||||||||||||
| 18.09.2024, 14:53 | ||||||||||||
0
|
||||||||||||
| 18.09.2024, 14:53 | |
|
Помогаю со студенческими работами здесь
9
Доступ только для чтения Тип файла для сохранения и чтения Как запретить доступ для чтения с диска C для определенной программы? Доступ по указателю только для чтения Доступ только для чтения исправление Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
||||
|
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Нашел на реддите интересную статью под названием «Кто-нибудь знает, где получить бесплатный компьютер или. . .
|
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод
Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод.
Thinkpad X220 Tablet —. . .
|
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта
Симптом:
После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
|
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
|
Новый ноутбук
volvo 07.12.2025
Всем привет.
По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне:
Ryzen 5 7533HS
64 Gb DDR5
1Tb NVMe
16" Full HD Display
Win11 Pro
|
|
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
|
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
|
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов
На странице:
https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/
нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
|
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов.
. . .
|
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
|