Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Объясните


Imbalance ©   (2006-01-08 23:58:00) 

Вот код, почему вместо procedure пишут constructro и destructor? Нельзя ли как тут написать procedure?Объясните
  TClass=class;
    private
    public
       procedure Create;
       procedure Destroy;
    end;
За ранее спасибо


Джо   (2006-01-10 17:13:00) [1]

> [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.

Ну, это детали реализации.


Плохиш   (2006-01-10 17:00:00) [2]


> Imbalance   (08.01.06 23:58)  
> Вот код, почему вместо procedure пишут constructro и destructor?

Это соглашения языка программирования.


Leonid Troyanovsky   (2006-01-10 16:02:00) [3]


> Джо ©   (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.


Piter   (2006-01-10 14:59:00) [4]

Amoeba ©   (10.01.06 13:17) [11]
то при вызове простого метода объект не будет создан/разрушен.


зато это можно сделать вручную, с помощью NewInstance :)


Amoeba   (2006-01-10 13:17:00) [5]

Если метод объявлен как constructor или destructor, то компилятор невидимо для программиста добавляет код создающий/разрушающий экземпляр объекта. Если эти волшебные слова не использовать, то при вызове простого метода объект не будет создан/разрушен.


Гаврила   (2006-01-10 11:06:00) [6]

Ну, это уж получается совсем специализированный случай.
Собственно, зачем нужно указание "constructor"
это прямое указание компилятору, что при вызове метода, помеченного как "constructor" (именно при вызове от класса, а не от экземпляра) его (экземпляр) нужно создать(перед выполнением тела метода)
Собственно, зачем нужно указание "destructor"
это прямое указание компилятору, что при вызове метода, помеченного как "destructor" экземпляр нужно разрушить (после выполнения тела метода)
и все.


Джо   (2006-01-09 15:00:00) [7]

> [7] ЮЮ ©   (09.01.06 07:38)

Подумал я тут... И решил, что ваша поправка как-раз, на мой взгляд, прекрасно входит в понятие "специализированный случай" в моем определении  [4]. Ибо, как ни крути, конструктор имеет черты и классовых и регулярных  методов.
:)


Piter   (2006-01-09 14:53:00) [8]

ЮЮ ©   (09.01.06 7:38) [7]
чего не сделаешь в методе класса.


может быть, в "классовом методе"? :)


ЮЮ   (2006-01-09 07:38:00) [9]

>Это относится только к Create, разумеется.

и к Create, ИМХО, это тоже не относится, т.к. в конструкторе вполне легально можно обращаться к полям экземпляра класса, чего не сделаешь в методе класса.


Джо   (2006-01-09 01:20:00) [10]

> [4] Джо ©   (09.01.06 01:06)

Это относится только к Create, разумеется.


palva   (2006-01-09 01:18:00) [11]

Наверно, можно. Если конструктор с именем, отличным от Create имеется в самом классе или наследуемом классе, то почему бы не завести в классе процедуру Create. Другой вопрос - для какой цели, что вы поручите делать этой процедуре.


Джо   (2006-01-09 01:06:00) [12]

По сути, это просто частный специализированный случай классовых методов (class procedure, class function), в отличие от методов экземпляра.


McSimm   (2006-01-09 00:57:00) [13]

читайте, пожалуйста, правила форума


McSimm   (2006-01-09 00:54:00) [14]

нельзя.
чтобы работать с экземпляром объекта необходимо его создать.

SomeVar  := TSomeClass.Create;

Вы в своей процедуре можете только проинициализировать объект, но чтобы он был создан (выделена память, построены таблицы) и указатель на все это был возвращен - необходим конструктор.

Аналогично для целей разрушения экземпляра (и освобожления ресурсов) необходим деструктор. В процедуре вы можете освободить только выделенную вами память, но память отведенную под сам экземпляр (конструктором) тоже надо освобождать.


Bogdan1024   (2006-01-09 00:37:00) [15]

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.


Наверх

Титульная страница Поиск, карта сайта Написать письмо