Вопрос по наследованию интерфейсов

Программирование на Атлантисе (VIP, FCOM, ARD), FastReport

Модераторы: m0p3e, edward_K, Модераторы

Ответить
Buddy
Постоянный обитатель
Сообщения: 122
Зарегистрирован: 02 июн 2016, 15:18
Откуда: Галактика СПб

Вопрос по наследованию интерфейсов

Сообщение Buddy »

Есть интерфейс APLPOR, унаследованный от PLPOR:

APlPor.vih:

Код: Выделить всё

VipInterface APlPor(F_PlPor::PlPor) 
Licensed (#include PlPor.lih )
parameters 
(
lPlPorMarker:longint
);  
В стандартном PlPor есть метод PrintPlatDocs, который необходимо видоизменить.
Как правильно объявить в APlPor.vih и APlPor.vip, что я хочу заменить PrintPlatDocs своей реализацией?

P.S. Документацию читал, но помогло не сильно )
Den
Местный житель
Сообщения: 1844
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Ярославская область ОАО "Часовой завод Чайка" г. Углич
Контактная информация:

Re: Вопрос по наследованию интерфейсов

Сообщение Den »

Если PrintPlatDocs не Public, то никак.
т.е. ,в унаследованном от предка стандартного своем фейсе перекрыть локальную функцию никак - если её вызов есть в коде родителя.
В Alter можно overload ее сделать. Но у вас именно чистый наследник.
Если только описать функцию по сути ту же самую и с другим именем и дергать ее откуда нужно . Но тоже, конечно, может быть не все так просто :)
edward_K
Заслуженный деятель интернет-сообщества
Сообщения: 5188
Зарегистрирован: 29 мар 2005, 17:49
Откуда: SPB galaxy spb

Re: Вопрос по наследованию интерфейсов

Сообщение edward_K »

Если все таки есть выпущенная наружу

Код: Выделить всё

//-------------------------------------
ObjInterface Interface_BASE;

  //-------------------------------------
  #doc
   Защитить данные
  #end
  Procedure SetEditMode(Value: boolean);
end;
то перекрытие так

Код: Выделить всё

VipInterface Interface_Child(Interface_Base) #Licensed_Free;
Public:
  Constructor Init;
  Destructor  Done;
  Procedure oInterface_Base.SetEditMode(Value: boolean);
end;
Inherited доступен.
Иначе да - объявляете свою функцию, и в ней юзаете стандартную.
Если нет, то можно попробовать объявить как (вроде катит так - но не понмю)
Procedure SetEditMode(Value: boolean);
но вам придется полностью ее переписывать.
С событиями в наследнике попроще.
Иногда я делаю Alter, потом наследника - в одном проекте и соблюдая последовательность компиляции - так тоже работаетю
Вообще часто в наследнике у меня остаются лишь доплнительные параметры вызова(сами переменные я задаю в Alter) ну или какие то дополнительньые функции, необходимые для выпуска наружу - так проще.
Buddy
Постоянный обитатель
Сообщения: 122
Зарегистрирован: 02 июн 2016, 15:18
Откуда: Галактика СПб

Re: Вопрос по наследованию интерфейсов

Сообщение Buddy »

Коллеги, спасибо, проблема решена.
Ответить