Механизм отражения

Механизм отражения позволяет получить информацию об экземплярах, не зная заранее их тип. Во встроенном языке в пространстве Стд::Отражение реализован ряд типов, которые позволяют, например:
  • Получать свойства экземпляров, перебирать их, читать и устанавливать их значения;
  • Создавать экземпляры типов, имена которых вычисляются во время работы приложения.

Перебор свойств типа.

пер Тип = Контрагенты.ПолучитьТип()
для Свойство из Тип.ПолучитьСвойства()
    знч имя = Свойство.Имя
    знч типы = Свойство.Типы
    знч чтениеЗначения = &Свойство.Получить // геттер
    знч записьЗначения = &Свойство.Установить // сеттер
;

Сериализация.

для каждого Объект из МассивОбъектов
    пер Свойства = Объект.ПолучитьТип().ПолучитьСвойства()
    для каждого Свойство из Свойства
        ФайлПриемник.Записать(Свойство.Имя, Свойство.Получить(Объект))
    ;
;

Копирование структуры.

структура ФизическоеЛицо
   пер Пол: Пол
   пер Имя: Строка
   пер Фамилия: Строка
   пер Отчество: Строка
   пер ДатаРождения: Дата
   пер СНИЛС: Строка
;
 
// С помощью конструктора структур, использующих именованные параметры
метод КопияФизЛица(Источник: ФизическоеЛицо): ФизическоеЛицо
    знч ПоляКопирования = новый Соответствие<Строка, Объект>
    для Свойство из Источник.ПолучитьТип().ПолучитьСвойства()
        ПоляКопирования.Вставить(
           Свойство.Имя.ВСтроку(), // оно двуязычное
           Свойство.Получить(Источник))
    ;
 
    возврат Тип<ФизическоеЛицо>.СоздатьЭкземпляр(ПоляКопирования);
;
 
// Почленное копирование
метод КопияФизЛица2(Источник: ФизическоеЛицо): ФизическоеЛицо
    знч Копия = новый ФизическоеЛицо
    для Свойство из Источник.ПолучитьТип().ПолучитьСвойства()
        Свойство.Установить(Копия, Свойство.Получить(Источник))
    ;
;

Создание экземпляра типа. Передача аргументов в конструктор выполняется в позиционной форме, в порядке объявления.

метод ЗагрузитьИзJson(ИмяТипа:Строка, ДанныеВJson:ЧитаемоеСоответствие<Строка, Объект?>)
 
    знч ТипОбъекта = НайтиТип(ИмяТипа)
    знч Объект = ТипОбъекта.СоздатьЭкземпляр([])
    для СвойствоJson из ДанныеJson
        Объект[СвойствоJson.Ключ] = СвойствоJson.Значение
    ;
;

Создание экземпляра типа. Передача аргументов в конструктор выполняется в именованной форме. Метод может применяться, когда конструктор объекта подразумевает использование параметров только в именованной форме.

метод ЗагрузитьИзJson(ИмяТипа:Строка, ДанныеВJson:ЧитаемоеСоответствие<Строка, Объект?>)
 
    знч ТипОбъекта = НайтиТип(ИмяТипа)
    Если ТипОбъекта.МожетБытьПрисвоенВ(Тип<Справочник.Объект>)
        знч СправочникОбъект = ТипОбъекта.СоздатьЭкземпляр(ДанныеВJson) как неизвестно
        СправочникОбъект.Записать()
    ;
;