Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2008.09.28;
Скачать: [xml.tar.bz2];

Вниз

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

 
cyborg   (2008-08-18 14:45) [0]

Просто для интереса, допустим есть класс:

TCl = class
 function Check(const aParam1: Integer): Boolean;
end;

function TCl.Check(const aParam1: Integer): Boolean;
begin
 Result := aParam = 3;
 if aParam = 10 then
   Exit;  
end;

и есть его потомок:

TCl2 = class
 function Check(const aParam1: Integer): Boolean;
end;

function TCl2.Check(const aParam1: Integer): Boolean;
begin
 inherited Check(aParam);
 ...
end;

Так вот, нельзя ли как-нибудь унаследовать присвоение Result"у и Exit? Т.е. чтобы Result у TCl2.Check стал таким же как у TCl.Check и если у TCl.Check сработает Exit, то он бы сработал и у TCl2.Check.


 
Palladin ©   (2008-08-18 14:51) [1]

во первых нужно метод сделать виртуальным
во вторых result:= inherited Check(aParam);


 
Leonid Troyanovsky ©   (2008-08-18 14:57) [2]


> cyborg   (18.08.08 14:45)  

> у TCl.Check и если у TCl.Check сработает Exit, то он бы
> сработал и у TCl2.Check.

Exit работает везде.
М.б., речь шла про Abort/Raise?

--
Regards, LVT.


 
cyborg   (2008-08-18 15:06) [3]


> Palladin ©   (18.08.08 14:51) [1]

Спасибо, а то я пытался писать вот так: inherited result := Check(aParam);


> Leonid Troyanovsky ©

Я имел в виду, что если записать вот так:

 TCl = class
 public
   function Check(const aParam: Integer): Boolean; virtual;
 end;

 TCl2 = class(TCl)
 public
   function Check(const aParam: Integer): Boolean; override;
 end;

function TCl.Check(const aParam: Integer): Boolean;
begin
 Result := aParam = 3;
 if aParam = 10 then
   Exit;
end;

function TCl2.Check(const aParam: Integer): Boolean;
begin
 Result := inherited Check(aParam);

 Result := True;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
 vCl2: TCl;
 b: Boolean;
begin
 vCl2 := TCl2.Create;

 b := vCl2.Check(10);

 vCl2.Free;
end;

то b должно быть присвоено False.


 
Leonid Troyanovsky ©   (2008-08-18 15:49) [4]


> cyborg   (18.08.08 15:06) [3]

> то b должно быть присвоено False.


function TCl.Check(const aParam: Integer): Boolean;
begin
Result := aParam = 3;
if aParam = 10 then
  Abort;
end;

function TCl2.Check(const aParam: Integer): Boolean;
begin
try
  Result := inherited Check(aParam);
except
  on E: EAbort do Exit;
end;
Result := True;
end;

--
Regards, LVT.


 
cyborg   (2008-08-18 16:00) [5]


> Leonid Troyanovsky ©   (18.08.08 15:49) [4]

Интересный способ. Только получается Abort немного не по назначению используется.
Спасибо.


 
Германн ©   (2008-08-18 16:09) [6]


> Только получается Abort немного не по назначению используется.

Почему не по назначению?


 
cyborg   (2008-08-18 16:16) [7]


> Почему не по назначению?

Ну, так это же не исключение, а вполне нормальное поведение.


 
Leonid Troyanovsky ©   (2008-08-18 16:20) [8]


> cyborg   (18.08.08 16:00) [5]

> Интересный способ. Только получается Abort немного не по
> назначению используется.

Abort это чтобы мне меньше писать, а, во-ще, д.б. собс-ный
класс исключения.
Да и, во-ще, над проектированием еще надо поднаразмышлять.

--
Regards, LVT.



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

Форум: "Начинающим";
Текущий архив: 2008.09.28;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.04 c
15-1216037491
sD
2008-07-14 16:11
2008.09.28
Структура приложение на Delphi + MS SQL


3-1206953949
leonidus
2008-03-31 12:59
2008.09.28
Получение первой записи в таблице


2-1219221866
Элек_Троник
2008-08-20 12:44
2008.09.28
Организация хранения результатов запросов через API в памяти


2-1219302166
Fynjy
2008-08-21 11:02
2008.09.28
использовать IBQuery в разных юнитах


2-1218999520
Lamer666
2008-08-17 22:58
2008.09.28
MD5





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский