Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.10.10;
Скачать: 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 вся ветка

Текущий архив: 2004.10.10;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.04 c
14-1095689083
inic
2004-09-20 18:04
2004.10.10
Кто и как использует интерфейсы ?


6-1091728035
Лёва З.
2004-08-05 21:47
2004.10.10
Кодировка сообщений в TNMSMTP


1-1096316565
][ncognito
2004-09-28 00:22
2004.10.10
Форма "Прыгает" не в тему!


14-1095699462
}|{yk
2004-09-20 20:57
2004.10.10
Группа Тартак, или украинский рэп


14-1095554579
Думкин
2004-09-19 04:42
2004.10.10
С днем рождения! 19 сентября