Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Как получить адрес метода объекта?

268
15 октября 2005 года
Михаил
587 / / 25.06.2005
Расскажите пожалйста:-?
9.8K
15 октября 2005 года
bqserg
56 / / 27.09.2005
А по конкретней можно, для чего и какой метод?
5
16 октября 2005 года
hardcase
4.5K / / 09.08.2005
Цитата:
Originally posted by Михаил
Расскажите пожалйста:-?


Есть такая операция в паскале - получение адреса @

 
Код:
Ptr:=@TMyClass.MyMethod;

Это будет работать как со статическими, так и с динамическими и виртуальными методами.

Насолько я знаю, сам по себе адрес метода класса в Делфях абсолютно бесполезен. Другое дело - процедурный тип. Если ты хочешь получить адрес метода, а потом его где-то вызвать без прямого обращения к объекту, то объяви переменную процедурного типа (шаблоны метода и процедурного типа, ессно должны совпадать)
Код:
type
  TObjectProc = procedure (Param1:  TParam1Type ... ParamN: TParamNType) of object;

var
  ProcPtr: TObjectProc;

begin
//получение адреса метода и указателя на объект MyObject
   ProcPtr:=MyObject.MyMethod;

//вызов метода: происходит неявное обращение в объекту MyObject (его передача в MyMethod как указатель Self)
  ProcPtr(Param1,...,ParamN);
end;
268
16 октября 2005 года
Михаил
587 / / 25.06.2005
Цитата:
Originally posted by hardcase
Есть такая операция в паскале - получение адреса @
 
Код:
Ptr:=@TMyClass.MyMethod;

Это будет работать как со статическими, так и с динамическими и виртуальными методами.


Что такое TMyClass - это экземпляр класса или уже переменная, созданная из этого экземпляра класса?

5
16 октября 2005 года
hardcase
4.5K / / 09.08.2005
Цитата:
Originally posted by Михаил
Что такое TMyClass - это экземпляр класса или уже переменная, созданная из этого экземпляра класса?


Это класс (с переменной тоже прокатит)

268
16 октября 2005 года
Михаил
587 / / 25.06.2005
Цитата:
Originally posted by hardcase
Это класс (с переменной тоже прокатит)


Получается так, что для всех переменных типм класса TMyClass функции в памяти одни т.е. в память загружаются функции класса и пользуются всеми переменными, объявлеными как TMyClass. Прав ли я?

299
16 октября 2005 года
3D Bob
885 / / 18.04.2005
Цитата:
Originally posted by Михаил
Получается так, что для всех переменных типм класса TMyClass функции в памяти одни т.е. в память загружаются функции класса и пользуются всеми переменными, объявлеными как TMyClass. Прав ли я?


Да, для всех классов одного типа существует только одна ф-ция.

5
16 октября 2005 года
hardcase
4.5K / / 09.08.2005
Цитата:
Originally posted by Михаил
Получается так, что для всех переменных типм класса TMyClass функции в памяти одни т.е. в память загружаются функции класса и пользуются всеми переменными, объявлеными как TMyClass. Прав ли я?


Да, Вы правы, это одна из концепций ООП. :)

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог