Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

наследование [D7, WinXP]


Andrushk ©   (2003-01-10 15:40:00) 

Как сделать следующую штуку:
вызывается некая процедура 1, в ней первой строкой стоит вызов предка. В процедуре предке делаются некие действия. Надо сделать так, что если выполниться условие, то надо выйти из процедуры, причем выйти так, чтобы не выполнились действия стоящие после inherited. И вот еще, procedure 1 - менять нельзя (т.к. потомков уже слишком много)

Предок
----
procedure....2
begin
ОПЕРАТОРЫ
if условие=true then //выйти
// с этого места надо прервать выполнение процедуры
ОПЕРАТОРЫ
end;
----------

Потомок
----
procedure....1
begin
inherited
// сюда уже попасть мы не должны
ОПЕРАТОРЫ
end;
----------


Andrushk   (2003-01-14 11:53:00) [1]

> Calm
Понял, хитро конечно :-)


Calm   (2003-01-11 13:22:00) [2]


> Andrushk (11.01.03 11:37)
...
> >Calm,Skier Может я недопонял ваших методов, если разъясните
> - буду очень признателен...я думаю, пригодиться мне для
> общего развития


Я же написал, что перекрыватьв потомках следует метод MyAction, но для выполнения действия вызывать НЕ MYACTION, а DoIt.

Безусловно, использование исключения - хороший способ решения проблемы. Но считаю, что следует стремиться к уменьшению их количества. Ведь можно просто где-то забыть его отловить...


Andrushk   (2003-01-11 11:37:00) [3]

>TTCustomDelphiMaster

Действительно, получается проще некуда...Спасибо!

>Calm,Skier Может я недопонял ваших методов, если разъясните - буду очень признателен...я думаю, пригодиться мне для общего развития


TTCustomDelphiMaster   (2003-01-10 19:53:00) [4]

Генерируй исключение в procedure....2


Andrushk   (2003-01-10 19:14:00) [5]

>Skier Не понял идеи, можно подробнее

>Calm А чего именилось то?
Ну я перекрою DoIt в потомке, когда он сработает сработает inherited и вызовется DoIt предка, допустим условие сработает, и что? что должно стоять в MyAction чтобы управление больше не передалось потомку? Мне-то надо что, что если сработает условие, то тогда все стоящее после inherited уже не сработает


Calm   (2003-01-10 15:50:00) [6]

Нужно привести логику организации класса к виду

TПредок=class
private
function Check:boolean; // это неизменно всегда
protected
procedure MyAction; virtual; // это будет перекрывать в
public
procedure DoIt; // Это нужно вызывать в потомках, чтобы выполнить действия из MyActon
потомках
end;

procedure TПредок.DoId;
begin
if Check
then MyAction;
end;


Тогда и проблем с проверкой не будет и перекрывать можно все, что угодно.


Skier   (2003-01-10 15:47:00) [7]

>Andrushk
Ну ежели менять нельзя, то попробуй извратиться с
помощью флага, (флаг - должен быть полем класса).

А лучше бы конечно сделать Предок.процедура1 -> Предок.функция1


Наверх

Титульная страница Поиск, карта сайта Написать письмо