Форум: "Основная";
Текущий архив: 2003.01.23;
Скачать: [xml.tar.bz2];
Внизнаследование Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.007 c