Последние записи
- Преобразовать массив байт в вещественное число (single)
- TChromium (CEF3), сохранение изображений
- Как в Delphi XE обнулить таймер?
- Изменить цвет шрифта TextBox на форме
- Ресайз PNG без потери прозрачности
- Вывод на печать графического файла
- Взаимодействие через командную строку
- Перенести программу из Delphi в Lazarus
- Определить текущую ОС
- Автоматическая смена языка (раскладки клавиатуры)
Интенсив по Python: Работа с API и фреймворками 24-26 ИЮНЯ 2022. Знаете Python, но хотите расширить свои навыки?
Slurm подготовили для вас особенный продукт! Оставить заявку по ссылке - https://slurm.club/3MeqNEk
Online-курс Java с оплатой после трудоустройства. Каждый выпускник получает предложение о работе
И зарплату на 30% выше ожидаемой, подробнее на сайте академии, ссылка - ttps://clck.ru/fCrQw
19th
Мар
public/published методы
Posted by maloy under Delphi, Архив
Altera
Вопрос в следующем:
Экспериментируя с вызовом методов, указатели которых находились в tList я обнаружил, что public и published методы всех экземпляров одного и того же класса (или объекта, не знаю, как правильно), не важно, выделена ли под них (экземпляры классов) память, или нет, имеют один и то-то же адрес, не равный Nil. Вот я и хочу, что-бы вы мне это объяснили, почему так происходит?
alexBlack
Обратите внимание на структуру:
TMethod = record
Code, Data: Pointer;
end;
Для методов класса используется именно она.
Таким образом в TList придется хранить структуру или использовать два TList или хранить только адрес, а экземпляр подставлять потом.
type
MyProc = procedure of object;
MyClass = class
procedure test1;
end;
procedure MyClass.test1;
begin
ShowMessage('1');
end;
procedure TForm19.FormCreate(Sender: TObject);
var C:MyClass;
M:TMethod;
begin
C := MyClass.Create;
try
MyProc(M) := C.test1; // сохраняется адрес метода и ссылка на экземпляр объекта
MyProc(M); // Вызов процедуры
finally
C.Free;
end;
end;
Utkin
А почему собственно должно быть иначе? Это свойство ООП — каждый раз при создании объектов память выделяется только под поля (уже не помню как со свойствами). Делфи это компилятор и после компиляции код НЕ ИЗМЕНЯЕТСЯ, поэтому код всегда находится на одном месте. А методу пофигу какие данные обрабатывать и по идеи его можно наколоть и подсунуть вообще левые. Сделать же так Вы не можете не потому что не компилица, а потому что компилятор это отслеживает, теоретические же это вполне возможно (но глупо с точки зрения ООП).
тема на форуме от 2009 года
Похожие статьи
Купить рекламу на сайте за 1000 руб
пишите сюда - alarforum@yandex.ru
Да и по любым другим вопросам пишите на почту
пеллетные котлы
Пеллетный котел Emtas
Наши форумы по программированию:
- Форум Web программирование (веб)
- Delphi форумы
- Форумы C (Си)
- Форум .NET Frameworks (точка нет фреймворки)
- Форум Java (джава)
- Форум низкоуровневое программирование
- Форум VBA (вба)
- Форум OpenGL
- Форум DirectX
- Форум CAD проектирование
- Форум по операционным системам
- Форум Software (Софт)
- Форум Hardware (Компьютерное железо)