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

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

Self^


TUser ©   (2004-09-22 12:35:00) 

Почему нельзя написать Self^ или Form1^, если это вроде бы обычные указатели (на объекты)?


DiamondShark   (2004-09-22 17:03:00) [1]

А можно нескромный вопрос?
Зачем так писать?


TUser   (2004-09-22 15:01:00) [2]

Да, не рассказал нам Борланд, почему он так решил. Ну ладно. Будем писать как и раньше, без ^


Amoeba   (2004-09-22 13:57:00) [3]

Вопрос похоже исчерпан. Пора закрывать ветку или отправлять в "Потрепаться".


MANGOL   (2004-09-22 13:56:00) [4]

A variable of a class type is actually a pointer that references an object. Hence more than one variable can refer to the same object. Like other pointers, class-type variables can hold the value nil. But you don’t have to explicitly dereference a class-type variable to access the object it points to. For example, SomeObject.Size := 100 assigns the value 100 to the Size property of the object referenced by SomeObject; you would not
write this as SomeObject^.Size
:= 100.

Delphi help

тоесть, вы НЕ ДЛЖНЫразыменовывать, и всё тут.


TUser   (2004-09-22 13:43:00) [5]

Это так


Amoeba   (2004-09-22 13:28:00) [6]

Раз теперь объекты (новой модели) только ДИНАМИЧЕСКИЕ, то сам посуди, нафига нужно использовать форму записи Oblect^? Тем более, что никакая арифметика с указателями на них просто бессмысленна.


Amoeba   (2004-09-22 13:22:00) [7]


> TUser ©   (22.09.04 13:19) [7]

Все вопросы к Borland'у.

IMHO это сделано для удобства.


TUser   (2004-09-22 13:19:00) [8]


> . Записи, например, очень даже статические

Я про объекты говорил.

Учебники я читал. Мне непонятно, почему так сделано, что одни операции, определенные для указателей, применимы к объектам, а другие - нет.


simpson   (2004-09-22 13:03:00) [9]

> TUser ©   (22.09.04 12:58) [3]
> Ведь все объекты в ObjectPascal - динамические

Неправда. Записи, например, очень даже статические. Да и перменные простых типов тоже.

Как ни странно, но лучше это все начинает пониматься после изучения основ .NET - там все очень похоже.


Amoeba   (2004-09-22 13:03:00) [10]


> TUser ©   (22.09.04 12:35)


> TUser ©   (22.09.04 12:58) [3]

Читай любой учебник по ObjectPascal. В Delphi синтаксис обращения к полям объектов изменился по ставнению с тем, как это было в TurboPascal. Явного разыменовывания для объектов теперь нет.


simpson   (2004-09-22 13:00:00) [11]

Это не указатели, а ссылкина объекты. А ссылки в тем и отличаются от указателей в использовании, что их не надо разыменовывать.


TUser   (2004-09-22 12:58:00) [12]

Любой указатель - это переменная.

Ведь все объекты в ObjectPascal - динамические. Можно ведь написать if Self <> nil then, сам Борланд так пишет. Т.е. работает с ними, как с указателями. Аналогично, можно написать Form1:=nil или Form1:=TForm1(Item.Data^), т.е. приводить тип произвольного указателя к своему типу. Только почему-то операция ^ для объектов не определена.


Cobalt   (2004-09-22 12:54:00) [13]

Формально - это не указатель, а переменная.
Можно только с указателями на класс проделывать такие фишки типа
type
 Class1=Class
 end;
 PClass1=^Class1;

var c:PClass1;
    s:string;
begin
c:=@Class1.create;
try
s:=c.ClassName;
s:=c^.ClassName;


правда, этот примерчик глючит чего-то, но компилируется без ошибок ;)


MBo   (2004-09-22 12:54:00) [14]

>это вроде бы обычные указатели (на объекты)?
Формально - нет
Где ты видел, чтобы TObject был определен как ^НаЧтоТо?
Ведь разыменование разрешено только для типа Pointer и типов с крыжиком ^TSomeType.


Наверх

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