4 / 4 / 5
Регистрация: 01.03.2013
Сообщений: 180
|
||||||
1 | ||||||
Передача объекта из одного экземпляра класса в другой с запретом обращаться к методам и свойствам этого объекта05.02.2019, 09:10. Показов 2822. Ответов 5
Метки нет (Все метки)
Всем привет!
Есть класс, в котором используется объект (MyObject, объявленный в private). При создании второго экземпляра этого класса нужно передать из первого этот объект. Причем так, чтобы нельзя было изменить никакое свойство этого объекта (вне класса) и нельзя было вызвать его методы. Создал в классе свойство на чтение
Возможно ли сделать это в Delphi? Спасибо!
0
|
05.02.2019, 09:10 | |
Ответы с готовыми решениями:
5
Не работает передача объекта из одного класса в другой через return Получение доступа к свойствам программно созданного объекта массива из эвента этого же объекта Передача имени класса и создание экземпляра соответствующего объекта Как обращаться к свойствам объекта? |
882 / 404 / 173
Регистрация: 20.10.2016
Сообщений: 1,828
|
||||||
05.02.2019, 09:34 | 2 | |||||
Ну, свойство с геттером тут точно не поможет. В нем хранится только указатель не объект. Далее, защищаться от удаления этого объекта вы будете от себя или от сторонних пользователей вашего класса? Если от себя, то тут надо лучше простроить алгоритм, чтобы избежать этих ситуаций. Если от других, то все просто. Объявляем деструктор объекта и проверяем:
1
|
4 / 4 / 5
Регистрация: 01.03.2013
Сообщений: 180
|
|
05.02.2019, 09:47 [ТС] | 3 |
не поможет, чтобы запретить использовать члены объекта или передать его в другой экземпляр этого класса?
Сама передача хорошо работает, но вот только смутило то, что объект этот извне могу использовать хоть как. От себя вряд-ли, ведь я знаю, что этот объект трогать нельзя, только передать его в другой экземпляр. С другой стороны, сейчас помню, потом забыл. Также, будут другие пользователи класса, которые могут что нибудь натворить с объектом. За идею и код - спасибо, но Free - не единственный метод объекта. Неужели придется оверрайдить каждый метод?
0
|
05.02.2019, 09:55 | 4 | |||||
Сообщение было отмечено Sanches как решение
Решение
а есть еще CLASS VAR если вам нужна переменная общая для всех объектов этого класса
1
|
882 / 404 / 173
Регистрация: 20.10.2016
Сообщений: 1,828
|
|
05.02.2019, 10:09 | 5 |
Чтобы его нельзя было использовать извне его не должно быть ни в каком виде в секции public. Соответственно, отсюда вывод: надо делать для класса-обертки свои методы, которые будут вызывать методы вложенного класса. Тогда все будет штатно и с проверкой.
Ни для чего. Защитит только от прямого присвоения (читай, замещения ссылки) другого экземпляра класса. Имхо, надо по умолчанию считать, что жизненный цикл внутренних объектов объекта-обертки должен обрабатываться объектом-оберткой и никем другим, если нет уверенности в ином.
1
|
4 / 4 / 5
Регистрация: 01.03.2013
Сообщений: 180
|
|
05.02.2019, 10:19 [ТС] | 6 |
0
|
05.02.2019, 10:19 | |
05.02.2019, 10:19 | |
Помогаю со студенческими работами здесь
6
Вызвать процедуру\функцию из другого объекта\класса. Из одного класса\объекта сделать два Передача методу одного объекта ссылки на другой объект Передача данных объекта одного класса , объекту другого Передача объекта однго класса в другой класс Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |