Переключение на Главную Страницу Страницы: 1 ОтправитьПечать
Обычная тема Доступ к свойству базового класса через экземпляр дочернего класса (число прочтений - 1343 )
es3000
God Member
*****
Отсутствует



Сообщений: 536
Зарегистрирован: 10. Июля 2006
Доступ к свойству базового класса через экземпляр дочернего класса
22. Мая 2019 :: 14:49
Печать  
В базовом классе "Т_Базовый" есть "публичный" реквизит:
Цитата:
Перем Результат Экспорт;


От базового класса наследуется "Т_Наследник".
Как сделать, чтобы можно было обращаться к публичному реквизиту базового класса?

Чтобы работал вот такой код:
Цитата:
лНаследник = СоздатьОбъект("Т_Наследник");
лНаследник.Результат = "ОК";


Как это сделать?

  
Наверх
ICQ  
IP записан
 
Mink Snopes
Junior Member
**
Отсутствует


bookkeeping considered
harmful

Сообщений: 30
Местоположение: Dombabwe
Зарегистрирован: 05. Ноября 2013
Re: Доступ к свойству базового класса через экземпляр дочернего класса
Ответ #1 - 23. Мая 2019 :: 05:47
Печать  
Код
Выбрать все
лНаследник.вирт().Результат = "ОК"; 

  
Наверх
 
IP записан
 
es3000
God Member
*****
Отсутствует



Сообщений: 536
Зарегистрирован: 10. Июля 2006
Re: Доступ к свойству базового класса через экземпляр дочернего класса
Ответ #2 - 23. Мая 2019 :: 06:19
Печать  
Mink Snopes писал(а) 23. Мая 2019 :: 05:47:
Код
Выбрать все
лНаследник.вирт().Результат = "ОК"; 



Как-то стремно.

А если в иерархии несколько классов?

Например, есть такая иерархия:
ТБазовый -> ТНаследник1 -> ТНаследник2 -> ТНаследник3 -> ТНаследникПоследний.

У класса ТНаследник2 есть публичный реквизит Результат.
Есть ссылка на ТНаследникПоследний.
Если написать:
"лНаследникПоследний.вирт().Результат = "ОК""

Сработает этот код?
  
Наверх
ICQ  
IP записан
 
Mink Snopes
Junior Member
**
Отсутствует


bookkeeping considered
harmful

Сообщений: 30
Местоположение: Dombabwe
Зарегистрирован: 05. Ноября 2013
Re: Доступ к свойству базового класса через экземпляр дочернего класса
Ответ #3 - 23. Мая 2019 :: 06:53
Печать  
es3000 писал(а) 23. Мая 2019 :: 06:19:
Сработает этот код?


Если вопрос в том, что нужно гарантированно установить атрибут "ТБазовый::Результат", что нужно писать
Код
Выбрать все
лНаследникПоследний.ПолучитьБазовыйКласс("ТБазовый").Результат = "ОК";
 



  
Наверх
 
IP записан
 
es3000
God Member
*****
Отсутствует



Сообщений: 536
Зарегистрирован: 10. Июля 2006
Re: Доступ к свойству базового класса через экземпляр дочернего класса
Ответ #4 - 23. Мая 2019 :: 10:33
Печать  
Mink Snopes писал(а) 23. Мая 2019 :: 06:53:
Если вопрос в том, что нужно гарантированно установить атрибут "ТБазовый::Результат", что нужно писать
Код
Выбрать все
лНаследникПоследний.ПолучитьБазовыйКласс("ТБазовый").Результат = "ОК";
 



Хм... Как-то некрасиво.
Теряется весь смысл наследования.
Ведь смысл наследования в том, что "клиент" (то есть вызывающий код) ничего не знает о том, как там класс реализован - какой у него базовый класс, как цепочка наследования.

  
Наверх
ICQ  
IP записан
 
es3000
God Member
*****
Отсутствует



Сообщений: 536
Зарегистрирован: 10. Июля 2006
Re: Доступ к свойству базового класса через экземпляр дочернего класса
Ответ #5 - 24. Мая 2019 :: 13:58
Печать  
Получается, свойствами в 1С++ пользоваться не возможно при наличии наследников.
Надо делать геттеры\сеттеры в базовом классе для каждого свойства.
  
Наверх
ICQ  
IP записан
 
Переключение на Главную Страницу Страницы: 1
ОтправитьПечать