Как получить адрес метода объекта?
Расскажите пожалйста:-?
А по конкретней можно, для чего и какой метод?
Цитата:
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;
TObjectProc = procedure (Param1: TParam1Type ... ParamN: TParamNType) of object;
var
ProcPtr: TObjectProc;
begin
//получение адреса метода и указателя на объект MyObject
ProcPtr:=MyObject.MyMethod;
//вызов метода: происходит неявное обращение в объекту MyObject (его передача в MyMethod как указатель Self)
ProcPtr(Param1,...,ParamN);
end;
Цитата:
Originally posted by hardcase
Есть такая операция в паскале - получение адреса @
Это будет работать как со статическими, так и с динамическими и виртуальными методами.
Есть такая операция в паскале - получение адреса @
Код:
Ptr:=@TMyClass.MyMethod;
Это будет работать как со статическими, так и с динамическими и виртуальными методами.
Что такое TMyClass - это экземпляр класса или уже переменная, созданная из этого экземпляра класса?
Цитата:
Originally posted by Михаил
Что такое TMyClass - это экземпляр класса или уже переменная, созданная из этого экземпляра класса?
Что такое TMyClass - это экземпляр класса или уже переменная, созданная из этого экземпляра класса?
Это класс (с переменной тоже прокатит)
Цитата:
Originally posted by hardcase
Это класс (с переменной тоже прокатит)
Это класс (с переменной тоже прокатит)
Получается так, что для всех переменных типм класса TMyClass функции в памяти одни т.е. в память загружаются функции класса и пользуются всеми переменными, объявлеными как TMyClass. Прав ли я?
Цитата:
Originally posted by Михаил
Получается так, что для всех переменных типм класса TMyClass функции в памяти одни т.е. в память загружаются функции класса и пользуются всеми переменными, объявлеными как TMyClass. Прав ли я?
Получается так, что для всех переменных типм класса TMyClass функции в памяти одни т.е. в память загружаются функции класса и пользуются всеми переменными, объявлеными как TMyClass. Прав ли я?
Да, для всех классов одного типа существует только одна ф-ция.
Цитата:
Originally posted by Михаил
Получается так, что для всех переменных типм класса TMyClass функции в памяти одни т.е. в память загружаются функции класса и пользуются всеми переменными, объявлеными как TMyClass. Прав ли я?
Получается так, что для всех переменных типм класса TMyClass функции в памяти одни т.е. в память загружаются функции класса и пользуются всеми переменными, объявлеными как TMyClass. Прав ли я?
Да, Вы правы, это одна из концепций ООП. :)