Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.46 MB
Время: 0.013 c
1-72369
Спрашивающий
2003-01-13 04:12
2003.01.23
Управление положением главной формы из немодального окна


1-72406
Silver Eagle
2003-01-13 18:00
2003.01.23
Получение значения Caption из используемого компонента


3-72098
lovres
2002-12-29 10:36
2003.01.23
Ошибка:RecordSet is not open


1-72345
Lexa
2003-01-12 01:29
2003.01.23
TBitMap


7-72573
mate
2002-11-11 12:39
2003.01.23
Windows




   Наверх