Форум: "Начинающим";
Текущий архив: 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