Форум: "Основная";
Текущий архив: 2003.11.17;
Скачать: [xml.tar.bz2];
ВнизКак обявить объект одновременно с созданием Найти похожие ветки
← →
Islander (2003-11-07 17:58) [0]Здравствуйте! Объекты я обычно объявляю так:
var
List: Tstrings;
begin
List:=Tstrings.create;
Слышал, что есть способ элегантнее, так, чтобы прямо в секции var объект создать. Может, подскажите?
← →
Palladin (2003-11-07 18:08) [1]Чем слышал?
← →
Islander (2003-11-07 18:13) [2]Это не имеет значение, но способ точно есть!
← →
Плохиш_ (2003-11-07 18:14) [3]Ну так ещё раз послушай, да нам раскажешь
← →
Palladin (2003-11-07 18:17) [4]По ночам за Делфи не сиди.
Приснится же....
← →
default (2003-11-07 18:24) [5]Islander (07.11.03 17:58)
на ночь ужасы не смотри
← →
me (2003-11-07 18:28) [6]Он видимо емеет в виду конструкцию типа
with Tstrings.create
begin
...
← →
Islander (2003-11-07 18:38) [7]Нет, не ее имею ввиду. Кто-то на форуме писал с месяц назад, реально создает объект в var"e
← →
Yakudza (2003-11-07 18:40) [8]Это из области как обнулить переменную.
← →
Palladin (2003-11-07 18:41) [9]Ну так найди и покажи. Если бы это было возможно, то наблюдалось бы сплошь и рядом.
← →
default (2003-11-07 18:46) [10]может автор сабжа имеет ввиду что-то типа
var
Appl: TApplication absolute Application;
...
Appl.Title := "А по ночам надо всё-таки спать"
но конечно здесь и речи не может быть о создании объекта Appl...
← →
me (2003-11-07 20:07) [11]Еще раз рискну предположить, что может дело в использовании старой объектной модели ТР, что-то вроде
type
objectTypeName = object (ancestorObjectType)
//memberList
end;
Тогда можно сразу объявить
var
xxx : objectTypeName;
и вперед
← →
Palladin (2003-11-07 20:13) [12]
> me (07.11.03 20:07) [11]
а что вперед?
без New(xxx,Init) ничего не получится
← →
Islander (2003-11-07 20:20) [13]нет, не так, именно в варе чего-то дописывали...
← →
Ломброзо (2003-11-07 20:24) [14]Я так понял, что чалаэк хочет стековый объект, навроде как в ++.
Palladin © (07.11.03 20:13) [12]
Получится. Я это решение использовал. Что-то навроде стековых классов в ++. Выгоды это не дает, потому что реально возникают проблемы 1) с областью видимости объекта 2) с обнулением полей после использования объекта. ВОт например:
//unitObj.pas
unit unitObj;
interface
type
TObj = object
public
iVar: integer;
procedure Print;
end;
implementation
{ TObj }
procedure TObj.Print;
begin
Writeln(iVar);
end;
end.
// Project1.dpr
program Project1;
{$APPTYPE CONSOLE}
uses
SysUtils,
unitObj in "unitObj.pas";
procedure proc1;
var pObj: TObj;
begin
pObj.iVar := 100;
pObj.Print;
end;
procedure proc2;
var pObj1: TObj;
begin
pObj1.Print;
end;
begin
proc1; // печатает 100
proc2; // печатает 100
readln;
end.
Так что с точки зрения уменьшения строк кода выгоды никакой.
← →
Chlavik (2003-11-07 20:25) [15]Поправочка
List:=TstringList.create; // :)
← →
Ломброзо (2003-11-07 20:26) [16]т.е. реально адрес объекта один и тот же.
← →
Palladin (2003-11-07 20:26) [17]точно... в ТП это ж был record... старею, забываю...
> Islander (07.11.03 20:20) [13]
слушай, может ты имеешь в виду инициализацию переменных
var
i:integer=0;
вообще уже надоело гадать...
← →
me (2003-11-07 20:29) [18]> Palladin (07.11.03 20:13) [12]
"Since object types do not descend from TObject, they provide no built-in constructors, destructors, or other methods. You can create instances of an object type using the New procedure and destroy them with the Dispose procedure, or you can simply declare variables of an object type, just as you would with records."
← →
default (2003-11-07 20:31) [19]me (07.11.03 20:29) [18]
это просто как пример был...
← →
Palladin (2003-11-07 20:33) [20]
> me (07.11.03 20:29) [18]
признаю ошибку...
то что привел я, нужно было для инициализации переменной-указателя на соответствующий Object...
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2003.11.17;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.011 c