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