Механизм отражения
Механизм отражения позволяет получить информацию об экземплярах, не зная заранее их тип. Во встроенном языке в пространстве Стд::Отражение реализован ряд типов, которые позволяют, например:
- Получать свойства экземпляров, перебирать их, читать и устанавливать их значения;
- Создавать экземпляры типов, имена которых вычисляются во время работы приложения.
Перебор свойств типа.
пер Тип = Контрагенты.ПолучитьТип()
для Свойство из Тип.ПолучитьСвойства()
знч имя = Свойство.Имя
знч типы = Свойство.Типы
знч чтениеЗначения = &Свойство.Получить // геттер
знч записьЗначения = &Свойство.Установить // сеттер
;
Сериализация.
для каждого Объект из МассивОбъектов
пер Свойства = Объект.ПолучитьТип().ПолучитьСвойства()
для каждого Свойство из Свойства
ФайлПриемник.Записать(Свойство.Имя, Свойство.Получить(Объект))
;
;
Копирование структуры.
структура ФизическоеЛицо
пер Пол: Пол
пер Имя: Строка
пер Фамилия: Строка
пер Отчество: Строка
пер ДатаРождения: Дата
пер СНИЛС: Строка
;
// С помощью конструктора структур, использующих именованные параметры
метод КопияФизЛица(Источник: ФизическоеЛицо): ФизическоеЛицо
знч ПоляКопирования = новый Соответствие<Строка, Объект>
для Свойство из Источник.ПолучитьТип().ПолучитьСвойства()
ПоляКопирования.Вставить(
Свойство.Имя.ВСтроку(), // оно двуязычное
Свойство.Получить(Источник))
;
возврат Тип<ФизическоеЛицо>.СоздатьЭкземпляр(ПоляКопирования);
;
// Почленное копирование
метод КопияФизЛица2(Источник: ФизическоеЛицо): ФизическоеЛицо
знч Копия = новый ФизическоеЛицо
для Свойство из Источник.ПолучитьТип().ПолучитьСвойства()
Свойство.Установить(Копия, Свойство.Получить(Источник))
;
;
Создание экземпляра типа. Передача аргументов в конструктор выполняется в позиционной форме, в порядке объявления.
метод ЗагрузитьИзJson(ИмяТипа:Строка, ДанныеВJson:ЧитаемоеСоответствие<Строка, Объект?>)
знч ТипОбъекта = НайтиТип(ИмяТипа)
знч Объект = ТипОбъекта.СоздатьЭкземпляр([])
для СвойствоJson из ДанныеJson
Объект[СвойствоJson.Ключ] = СвойствоJson.Значение
;
;
Создание экземпляра типа. Передача аргументов в конструктор выполняется в именованной форме. Метод может применяться, когда конструктор объекта подразумевает использование параметров только в именованной форме.
метод ЗагрузитьИзJson(ИмяТипа:Строка, ДанныеВJson:ЧитаемоеСоответствие<Строка, Объект?>)
знч ТипОбъекта = НайтиТип(ИмяТипа)
Если ТипОбъекта.МожетБытьПрисвоенВ(Тип<Справочник.Объект>)
знч СправочникОбъект = ТипОбъекта.СоздатьЭкземпляр(ДанныеВJson) как неизвестно
СправочникОбъект.Записать()
;
;