https://github.com/oscript-library/reflector
Улучшенная работа с рефлектором и интерфейсами
https://github.com/oscript-library/reflector
Last synced: 11 months ago
JSON representation
Улучшенная работа с рефлектором и интерфейсами
- Host: GitHub
- URL: https://github.com/oscript-library/reflector
- Owner: oscript-library
- License: apache-2.0
- Created: 2018-04-10T14:31:51.000Z (almost 8 years ago)
- Default Branch: develop
- Last Pushed: 2023-01-18T08:11:44.000Z (about 3 years ago)
- Last Synced: 2024-12-31T20:17:04.870Z (about 1 year ago)
- Language: 1C Enterprise
- Homepage:
- Size: 136 KB
- Stars: 6
- Watchers: 5
- Forks: 6
- Open Issues: 3
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# `E`_nchanted_ `R`_eflector_ & `I`_nterfaces_ для OScript
[](https://github.com/khorevaa/reflector/stargazers)
[](https://github.com/khorevaa/reflector/releases)
[](https://gitter.im/oscript-reflector/Lobby?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
[](https://travis-ci.org/khorevaa/reflector)
[](https://coveralls.io/github/khorevaa/reflector?branch=master)
Короткое название библиотеки `reflector`
Данная библиотека для языка OScript, упрощает работу с встроенным объектом `Рефлектор` и добавляет функциональность работы с интерфейсами
[Документация и описание публичного API](docs/README.md)
## Быстрый старт
Библиотека реализовывает 2 новых класса:
* `РефлекторОбъекта` - класс отвечает за обработку проверки наличия методов у объектов и кеширования результатов
* `ИнтерфейсОбъекта` - клаcс реализовывает виртуальные интерфейсы для объектов и проводит их сравнение с картами объектов (метод `ПолучитьТаблицуМетодов` объекта `Рефлектор`)
## Установка
Для установки необходимо:
* Скачать файл reflector*.ospx из раздела [releases](https://github.com/khorevaa/reflector/releases)
* Воспользоваться командой:
```
$ opm install -f <ПутьКФайлу>
```
### Пример простой проверки на метод/свойство объекта
* Проверка на функцию объекта
```bsl
РасширенныйРефлектор = Новый РефлекторОбъекта(Новый ТестовыйКласс);
ЕстьФункция = РасширенныйРефлектор.ЕстьФункция("ПроверочнаяФункция", 5);
```
* Проверка на процедуру объекта
```bsl
РасширенныйРефлектор = Новый РефлекторОбъекта(Новый ТестовыйКласс);
ЕстьПроцедура = РасширенныйРефлектор.ЕстьПроцедура("ПроверочнаяПроцедура", 1);
```
* Проверка на свойство объекта
```bsl
РасширенныйРефлектор = Новый РефлекторОбъекта(Новый ТестовыйКласс);
ЕстьСвойство = РасширенныйРефлектор.ЕстьСвойство("Свойство1");
```
* Проверка объекта на реализацию интерфейса
```bsl
Интерфейс = Новый ИнтерфейсОбъекта;
Интерфейс.Ф("Функция1")
.П("Процедура1");
РасширенныйРефлектор = Новый РефлекторОбъекта(ЭтотОбъект);
РеализуетИнтерфейс = РасширенныйРефлектор.РеализуетИнтерфейс(Интерфейс);
Утверждения.ПроверитьИстину(РеализуетИнтерфейс, "Интерфейс реализуется объектом");
```
* Получение структуры реализованных методов объекта по интерфейсу
```bsl
Интерфейс = Новый ИнтерфейсОбъекта;
Интерфейс.Ф("Функция1")
.П("Процедура1")
.Ф("ЛиповаяФункция", 2)
.П("ЛиповаяПроцедура", 3);
РасширенныйРефлектор = Новый РефлекторОбъекта(Новый ТестовыйКласс);
РеализованныеМетодыИнтерфейса = РасширенныйРефлектор.РеализованныеМетодыИнтерфейса(Интерфейс);
```
## Доработка
Доработка проводится по git-flow. Жду ваших PR.
## Лицензия
Смотри файл `LICENSE`.