Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Дополнение в дочернем классе метода родительского / 9 сообщений из 9, страница 1 из 1
01.10.2018, 20:35
    #39711256
тгз
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Дополнение в дочернем классе метода родительского
Здравствуйте. Такой вопрос. Есть класс с определенным методом, дополняющим метод родителя. Структура такая:

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
TParent = class
    function func();

TChild = class(TParent)
    function func();

...

function TChild.func();
begin
    result := inherited;
end;



Внутри этого метода родительский класс перебирает все свойства объекта (через RTTI) и выполняет некоторые действия в зависимости от типа свойства. Некоторые типы там не рассмотрены, они появляются только в дочернем классе, и в каждом из дочерних могут появляться свои.

Нужно сделать так, чтобы дочерний класс обработал все свойства, пропущенные родительским классом. Как это можно реализовать?
...
Рейтинг: 0 / 0
01.10.2018, 20:46
    #39711268
Котовасия
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Дополнение в дочернем классе метода родительского
тгз,

инхеритед + до-обработка?
...
Рейтинг: 0 / 0
01.10.2018, 21:11
    #39711284
тгз
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Дополнение в дочернем классе метода родительского
Да, inherited - это понятно. А вот с "до-обработкой" проблемы. Как понять, какие свойства не были обработаны родительским классом?
...
Рейтинг: 0 / 0
01.10.2018, 21:30
    #39711298
тгз
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Дополнение в дочернем классе метода родительского
Понял, "до-обработка" - это обработка дочерним классом до вызова "inherited", правильно? Тогда в каждом из родительских классов получать список свойств заново и обрабатывать только те, которые данный класс может обработать? Не будет слишком дорогой операцией получение каждый раз этого списка?
...
Рейтинг: 0 / 0
01.10.2018, 22:05
    #39711311
Котовасия
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Дополнение в дочернем классе метода родительского
тгзПонял, "до-обработка" - это обработка дочерним классом до вызова "inherited", правильно? Тогда в каждом из родительских классов получать список свойств заново и обрабатывать только те, которые данный класс может обработать? Не будет слишком дорогой операцией получение каждый раз этого списка?
1. Помечай, флажки ставь.
2. Кому какое дело, кроме тебя, дорогая ли "эта" операция, или нет?
...
Рейтинг: 0 / 0
01.10.2018, 22:42
    #39711324
типа юзер
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Дополнение в дочернем классе метода родительского
тгз...выполняет некоторые действия в зависимости от типа свойства . Некоторые типы там не рассмотрены, они появляются только в дочернем классе , и в каждом из дочерних могут появляться свои.

Нужно сделать так, чтобы дочерний класс обработал все свойства, пропущенные родительским классом. Как это можно реализовать?очевидно же - в дочернем обрабатывать свойства тех типов , которые в нем и появляются.
если в дочернем добавлены свойства типов "рассматриваемых" родительским - родительский же их увидит через RTTI и обработает, разве нет?
...
Рейтинг: 0 / 0
01.10.2018, 22:53
    #39711325
DimaBr
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Дополнение в дочернем классе метода родительского
тгзНужно сделать так, чтобы дочерний класс обработал все свойства, пропущенные родительским классом. Как это можно реализовать?
Составить список свойств (TStringList) и помечать обработанные свойства флажком integer(TStringList.Object[i]) := 1;
Соответственно, обработанные более не обрабатывать
...
Рейтинг: 0 / 0
02.10.2018, 14:53
    #39711725
delphinotes
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Дополнение в дочернем классе метода родительского
тгз,

Я так понял, что для каждого свойства может быть своя функция.. и раз RTTI уже используется, то попробуй использовать атрибуты.
Атрибутами можно помечать свойства, которые надо обрабатывать. Атрибуты могут быть параметризованными, например иметь ссылку на процедуру обработки.
...
Рейтинг: 0 / 0
02.10.2018, 15:32
    #39711761
_Vasilisk_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Дополнение в дочернем классе метода родительского
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
TParent = class
    function func(): Boolean;  virtual;

TChild = class(TParent)
    function func(): Boolean; override;

...

function TChild.func(): Boolean;
begin
  result := inherited func();
  if not result then begin
    // Дообработка
  end;
end;
...
Рейтинг: 0 / 0
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Дополнение в дочернем классе метода родительского / 9 сообщений из 9, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]