Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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
1-72341
Pegas
2003-01-12 12:34
2003.01.23
DsgnIntf.dcu надоел он мне уже!


1-72408
Fors
2003-01-13 18:57
2003.01.23
номер позиции


1-72197
Соловьев
2003-01-14 10:00
2003.01.23
Для чего используют Pred?


6-72449
Kotka
2002-11-25 20:59
2003.01.23
Просто звонилка


1-72357
NewGuest
2003-01-12 21:12
2003.01.23
Как развернуть программу из минимизированного?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский