Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.01.23;
Скачать: CL | DM;

Вниз

наследование   Найти похожие ветки 

 
Andrushk   (2003-01-10 15:40) [0]

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

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

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


 
Skier ©   (2003-01-10 15:47) [1]

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

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


 
Calm ©   (2003-01-10 15:50) [2]

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

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

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


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


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

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

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


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

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


 
Andrushk   (2003-01-11 11:37) [5]

>TTCustomDelphiMaster

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

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


 
Calm ©   (2003-01-11 13:22) [6]


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


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

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


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

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



Страницы: 1 вся ветка

Текущий архив: 2003.01.23;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.015 c
1-72208
Andrushk
2003-01-10 15:40
2003.01.23
наследование


3-72111
Mike_hex
2002-12-30 10:29
2003.01.23
Связи таблиц в Delphi 5


1-72360
April
2003-01-12 11:27
2003.01.23
Как с формы удалить все компоненты, кроме как дестроить каждую?


7-72544
Konstantin
2002-11-09 19:06
2003.01.23
Програмирование сканеров фирмы ICOM?


1-72358
YY
2003-01-11 23:14
2003.01.23
Запуск Application.Run несколько раз