![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как получить адрес объекта из метода этого же объекта?
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, без предшествующего "барана"