Вниз
Скачать: CL | DM;

Self^   Найти похожие ветки 

← →
TUser ©   (2004-09-22 12:35) [0]

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


← →
Cobalt ©   (2004-09-22 12:54) [1]

Формально - это не указатель, а переменная.
Можно только с указателями на класс проделывать такие фишки типа
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) [2]

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


← →
TUser ©   (2004-09-22 12:58) [3]

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

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


← →
simpson ©   (2004-09-22 13:00) [4]

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


← →
simpson ©   (2004-09-22 13:03) [5]

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

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

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


← →
Amoeba ©   (2004-09-22 13:03) [6]


> TUser ©   (22.09.04 12:35)


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

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


← →
TUser ©   (2004-09-22 13:19) [7]


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

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

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


← →
Amoeba ©   (2004-09-22 13:22) [8]


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

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

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


← →
Amoeba ©   (2004-09-22 13:28) [9]

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


← →
TUser ©   (2004-09-22 13:43) [10]

Это так


← →
MANGOL   (2004-09-22 13:56) [11]

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

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


← →
Amoeba ©   (2004-09-22 13:57) [12]

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


← →
TUser ©   (2004-09-22 15:01) [13]

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


← →
DiamondShark ©   (2004-09-22 17:03) [14]

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



Страницы: 1 вся ветка

Скачать: CL | DM;



Память: 0.47 MB
Время: 0.023 c
1-1096089458
Влад
2004-09-25 09:17
2004.10.10
Синхронизация массивов


1-1096311431
Kolan
2004-09-27 22:57
2004.10.10
сделать калонку stringgrid не доступной


1-1095855940
Рамиль
2004-09-22 16:25
2004.10.10
MDIChild аналог модальной формы


6-1090316461
highlander
2004-07-20 13:41
2004.10.10
Отправка СМС-сообщений, используя HTTP


3-1094800875
skr
2004-09-10 11:21
2004.10.10
Создать программно алиас в BDE




   Наверх