Форум: "Основная";
Текущий архив: 2004.10.10;
Скачать: [xml.tar.bz2];
Вниз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;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.035 c