Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.12.30;
Скачать: CL | DM;

Вниз

Вызов метода   Найти похожие ветки 

 
Vladimir_Shk ©   (2002-12-18 18:44) [0]

Здравствуйте! Три объекта наследуемые один от другого. Скажем
class TOb1 (TObject);
class TOb2 (TOb1);
class TOb3 (TOb2);

В классе TOb1 есть виртуальный метод, который переопределяется в потомках. Ob2.Method выполняет какой-то код, затем вызывает inherited. Все просто.

А вот в Ob3 мне нужно выполнить какой-то код, а потом вызвать метод предка Ob1, пропустив метод Ob2.

Как это можно сделать?


 
Хрюккиннен   (2002-12-18 18:58) [1]

Можно (Ob3 as TOb1).Method;
А можно TOb1(Ob3).Method;


 
Хрюккиннен   (2002-12-18 19:01) [2]

Вернее, (Self as TOb1).Method, ежли ты пишешь внутри объектного метода


 
Skier ©   (2002-12-18 19:11) [3]

Примерно так...

TOb1 = class
public
procedure SomeMethod; virtual;
end;

TOb2 = class(TOb1)
public
procedure SomeMethod; override;
end;

TOb3 = class(TOb2)
public
procedure SomeMethod; override;
end;

//...........

{ TOb1 }

procedure TOb1.SomeMethod;
begin
ShowMessage("TOb1.SomeMethod");
end;

{ TOb2 }

procedure TOb2.SomeMethod;
begin
ShowMessage("TOb2.SomeMethod");
inherited;
end;

{ TOb3 }

procedure TOb3.SomeMethod;
type
PClass = ^TClass;
var
AOldClass : TClass;
begin
ShowMessage("TOb3.SomeMethod");
AOldClass := PClass(Self)^;
PClass(Self)^ := Self.ClassParent.ClassParent;
SomeMethod;
PClass(Self)^ := AOldClass;
end;


 
Skier ©   (2002-12-18 19:15) [4]

>Vladimir_Shk
Степень приближения к "аксакалу" (твоему корневому классу)
зависит от количества вызовов метода ClassParent
В твоём случае их два...


 
oomneeq ©   (2002-12-18 19:49) [5]

2 Хрюккиннен

приведение
TOb1(Ob3).Method равно как и (Self as TOb1).Method
не сыграет никакого рояля!

можно ставить приведение к любому типу (есессно, имеющему метод Method) все равно будет вызван TObj3.Method.

матчасть, однако.. VMT и все такое ...

Ты б проверял свои догадки прежде чем людЯм советовать.






 
Хрюккиннен   (2002-12-18 20:16) [6]

И то правда... Обманулся. Сорри.


 
down   (2002-12-18 20:25) [7]

type
TObMethod = procedure(Self: TObject);
procedure TOb3.SomeMethod;
var
ObMethod: TObMethod;
begin
ObMethod := @TOb1.Method;
ObMethod(Self);
end;




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

Текущий архив: 2002.12.30;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.012 c
3-98967
epifansan
2002-12-10 08:45
2002.12.30
Подскажите как обойтись без регистрации своих баз в БД


1-99044
dim-
2002-12-17 00:24
2002.12.30
Изменить глубину цвета у Image


14-99247
Song
2002-12-11 14:45
2002.12.30
Одна тема, которую никто не затронул: С наступаюющим, коллеги!


14-99351
hatchy
2002-12-11 12:42
2002.12.30
Надо что делать когда сам незнаешь как...


4-99402
delphi5.01
2002-10-25 23:14
2002.12.30
RichEdit + Perenos Slova