Форум: "Начинающим";
Текущий архив: 2006.01.29;
Скачать: [xml.tar.bz2];
ВнизОбъясните Найти похожие ветки
← →
Imbalance (2006-01-08 23:58) [0]Вот код, почему вместо procedure пишут constructro и destructor? Нельзя ли как тут написать procedure?Объясните
TClass=class;
private
public
procedure Create;
procedure Destroy;
end;
За ранее спасибо
← →
Bogdan1024 © (2006-01-09 00:37) [1]A constructor is a special method that creates and initializes instance objects. The declaration of a constructor looks like a procedure declaration, but it begins with the word constructor.
constructor пишется для понятности что это за процедура. Аналогично с destructor.
← →
McSimm © (2006-01-09 00:54) [2]нельзя.
чтобы работать с экземпляром объекта необходимо его создать.
SomeVar := TSomeClass.Create;
Вы в своей процедуре можете только проинициализировать объект, но чтобы он был создан (выделена память, построены таблицы) и указатель на все это был возвращен - необходим конструктор.
Аналогично для целей разрушения экземпляра (и освобожления ресурсов) необходим деструктор. В процедуре вы можете освободить только выделенную вами память, но память отведенную под сам экземпляр (конструктором) тоже надо освобождать.
← →
McSimm © (2006-01-09 00:57) [3]читайте, пожалуйста, правила форума
← →
Джо © (2006-01-09 01:06) [4]По сути, это просто частный специализированный случай классовых методов (class procedure, class function), в отличие от методов экземпляра.
← →
palva © (2006-01-09 01:18) [5]Наверно, можно. Если конструктор с именем, отличным от Create имеется в самом классе или наследуемом классе, то почему бы не завести в классе процедуру Create. Другой вопрос - для какой цели, что вы поручите делать этой процедуре.
← →
Джо © (2006-01-09 01:20) [6]> [4] Джо © (09.01.06 01:06)
Это относится только к Create, разумеется.
← →
ЮЮ © (2006-01-09 07:38) [7]>Это относится только к Create, разумеется.
и к Create, ИМХО, это тоже не относится, т.к. в конструкторе вполне легально можно обращаться к полям экземпляра класса, чего не сделаешь в методе класса.
← →
Piter © (2006-01-09 14:53) [8]ЮЮ © (09.01.06 7:38) [7]
чего не сделаешь в методе класса.
может быть, в "классовом методе"? :)
← →
Джо © (2006-01-09 15:00) [9]> [7] ЮЮ © (09.01.06 07:38)
Подумал я тут... И решил, что ваша поправка как-раз, на мой взгляд, прекрасно входит в понятие "специализированный случай" в моем определении [4]. Ибо, как ни крути, конструктор имеет черты и классовых и регулярных методов.
:)
← →
Гаврила © (2006-01-10 11:06) [10]Ну, это уж получается совсем специализированный случай.
Собственно, зачем нужно указание "constructor"
это прямое указание компилятору, что при вызове метода, помеченного как "constructor" (именно при вызове от класса, а не от экземпляра) его (экземпляр) нужно создать(перед выполнением тела метода)
Собственно, зачем нужно указание "destructor"
это прямое указание компилятору, что при вызове метода, помеченного как "destructor" экземпляр нужно разрушить (после выполнения тела метода)
и все.
← →
Amoeba © (2006-01-10 13:17) [11]Если метод объявлен как constructor или destructor, то компилятор невидимо для программиста добавляет код создающий/разрушающий экземпляр объекта. Если эти волшебные слова не использовать, то при вызове простого метода объект не будет создан/разрушен.
← →
Piter © (2006-01-10 14:59) [12]Amoeba © (10.01.06 13:17) [11]
то при вызове простого метода объект не будет создан/разрушен.
зато это можно сделать вручную, с помощью NewInstance :)
← →
Leonid Troyanovsky © (2006-01-10 16:02) [13]
> Джо © (09.01.06 15:00) [9]
> имеет черты и классовых и регулярных методов.
Constructors and destructors use the same calling conventions as other methods, except that an additional Boolean flag parameter is passed to
indicate the context of the constructor or destructor call.
--
Regards, LVT.
← →
Плохиш © (2006-01-10 17:00) [14]
> Imbalance (08.01.06 23:58)
> Вот код, почему вместо procedure пишут constructro и destructor?
Это соглашения языка программирования.
← →
Джо © (2006-01-10 17:13) [15]> [13] Leonid Troyanovsky © (10.01.06 16:02)
> Constructors and destructors use the same calling conventions
> as other methods, except that an additional Boolean flag
> parameter is passed to
> indicate the context of the constructor or destructor call.
Ну, это детали реализации.
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2006.01.29;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.463 c