![]() |
#11 |
Участник
|
Цитата:
Сообщение от skuull
![]() Атрибуты решают вполне конкретную задачу - добавление нового класса в иерархию без изменения родительского класса, что особенно актульно в 7ке, т.к. не надо оверлеить.
Паттерны из GoF и подобная литература решает конкретную задачу в программировании и очень жалко что по историческим причинам в АХ попадают люди предпочитающие методы по 2000 строк потому что "все в 1 месте, так удобней" и отрицающие все что "не как в 4ке". Выглядит как-то так ![]() Создаём базовый класс: X++: public class PPO_Base { } protected void new() { } public str getType() { return "Base"; } public static PPO_Base construct(IdentifierName _className = classstr(PPO_Base)) { DictClass dictClass = new DictClass(classname2id(_className)); ; if (!dictClass) throw error(strfmt("Unable to instantiate \"%1\" class", _className)); return dictClass.makeObject(); } public static void main(Args _args) { IdentifierName className = _args ? _args.parm() : classstr(PPO_Base); PPO_Base instance = PPO_Base::construct(className); ; info(strfmt("Class type: %1", instance.getType())); } X++: public class PPO_Derived extends PPO_Base { } public str getType() { return "Derived"; } Как использовать в коде: X++: PPO_Base base = PPO_Base::construct(); PPO_Base derived = PPO_Base::construct(classstr(PPO_Derived)); ; info(strfmt("Base class type: %1", base.getType())); info(strfmt("Derived class type: %1", derived.getType()));
__________________
// no comments |
|
|
За это сообщение автора поблагодарили: macklakov (1), skuull (2), ax_mct (3), ta_and (4), Logger (1). |
Теги |
sysextension framework, sysoperation framework, как правильно, полезное |
|
|