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

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.008 c
14-99324
Calm
2002-12-10 11:10
2002.12.30
Именинники 29 февраля


1-99078
Кокандокало
2002-12-18 19:49
2002.12.30
Delphi портит иконки..


1-99191
Шурик Ш
2002-12-19 10:24
2002.12.30
Обработка событий меню, созданного в процессе работы


7-99369
Дуся
2002-10-23 13:35
2002.12.30
EStackOverflow


1-99149
Niko
2002-12-18 16:28
2002.12.30
Как привязать Label к Shape?





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