Главная страница
    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
7-72570
DiHLoS
2002-11-12 16:57
2003.01.23
Как узнать номер BIOS компа?


14-72527
fgranit
2003-01-07 14:44
2003.01.23
Помогите запустить программу с таблицей PARADOX на другом компе


14-72490
Kair
2003-01-06 05:04
2003.01.23
Спокойной ночи программисты!


9-72017
LM
2002-07-23 23:32
2003.01.23
Double to String


1-72201
Андрусь
2003-01-13 12:49
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
Английский Французский Немецкий Итальянский Португальский Русский Испанский