Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

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


vico ©   (2007-07-13 10:17:00) 

Подскажите, пожалуйста, как (и можно ли) получить указатель на экземпляр класса внутри метода этого класса? Я пытался сделать что-то вроде @Self, но значение указателя получается "левое".


TUser   (2007-07-13 12:56:00) [1]

Впрочем, object до сих пор работает.


Anatoly Podgoretsky   (2007-07-13 11:40:00) [2]


> Учился и читал книжки еще в период Turbo Pascal 5.5, поэтому
> и пытаюсь все делать в логике "старых добрых" объектов с
> указателями на них.

Вот про это и надо забыть, объектная модель другая.


Ega23   (2007-07-13 11:20:00) [3]


> Спасибо всем! Действительно, не знал и "буду знать". Учился
> и читал книжки еще в период Turbo Pascal 5.5, поэтому и
> пытаюсь все делать в логике "старых добрых" объектов с указателями
> на них. Спасибо за урок -- переучиваюсь...


Бери Тексейру и - успехов!


vico   (2007-07-13 11:16:00) [4]

Спасибо всем! Действительно, не знал и "буду знать". Учился и читал книжки еще в период Turbo Pascal 5.5, поэтому и пытаюсь все делать в логике "старых добрых" объектов с указателями на них. Спасибо за урок -- переучиваюсь...


Инс   (2007-07-13 10:47:00) [5]


> А он не знает, что переменная класа это и есть указатель.


Теперь будет знать. Экземпляры классов живут в куче, а не в стеке, а переменная классового типа - это всего лишь указатель на них. А метод класса отличается от обычной процедуры или функции как раз тем, что в него неявно передается еще один параметр - ссылка на экземпляр, чей метод выполняется. Это и есть тот самый Self.


Сергей М.   (2007-07-13 10:39:00) [6]


> vico ©   (13.07.07 10:26) [2]


Посмотри внимательно на

showmessage(inttostr(sizeof(@self)));
showmessage(inttostr(sizeof(self)));

Удивись)


Ega23   (2007-07-13 10:35:00) [7]


> зачем тебе такая ерунда? указатель на указатель?


А он не знает, что переменная класа это и есть указатель.


{RASkov}   (2007-07-13 10:34:00) [8]

> [2] vico ©   (13.07.07 10:26)

procedure TForm1.Button1Click(Sender: TObject);
var I, K: Integer;
begin
 I:=Integer(@Self);
 K:=Integer(Self);
 ShowMessage(Format('I:=%d, K:=%d', [I, K]));
 TForm(K).Close;
end;


DVM   (2007-07-13 10:33:00) [9]


> Но просто Self -- это не тот тип: TMyClass вместо ^TMyClass

зачем тебе такая ерунда? указатель на указатель?


Инс   (2007-07-13 10:32:00) [10]

А зачем объявлять тип указателя на указатель?


Сергей М.   (2007-07-13 10:31:00) [11]


> просто Self -- это не тот тип


Как это "не тот" ?

Судя по


> получить указатель на экземпляр класса внутри метода этого
> класса


это как раз то что тебе нужно - Self и есть указатель на текущий объект.


Ega23   (2007-07-13 10:31:00) [12]


> Может, есть другие варианты?


Есть 2:
1. Читать книжку.
2. Если 1 не поможет - LMD.


vico   (2007-07-13 10:26:00) [13]

Но просто Self -- это не тот тип: TMyClass вместо ^TMyClass. Приведение PMyClass(Self) тоже дает неудовлетворительный результат -- пробовал... Может, есть другие варианты?


Сергей М.   (2007-07-13 10:18:00) [14]

Просто Self, без предшествующего "барана"


Наверх

Титульная страница Поиск, карта сайта Написать письмо