Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Поля класса в Turbo Delphi, Как правильно инициализировать поля 
:(
    Опции темы
Felan
Дата 21.5.2008, 09:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 284
Регистрация: 2.8.2007
Где: Самара

Репутация: 2
Всего: 7



Есть класс:

Код

  T2 = class(T1)
  private
  class var
    fCV: UTF8String;
  var
    fCV: String;
  public
    constructor Create(); override;
  end;



Как и где правильно инициализировать поле fCV? Как сделать его константой? Че-то я не нашел в справке ничего похожего на class const?

Есть ли какие либо аналоги статических конструкторов или инициализаторов?


--------------------
// Любая сложная система - это темный лес. Каждый в этом лесу протаптывает свои тропинки, по ним и бегает. Лишь изредка, сходя с них, мы находим много интересного, а порою и страшного.
PM MAIL WWW ICQ   Вверх
Alexeis
Дата 21.5.2008, 10:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 109
Всего: 459



Цитата(Felan @  21.5.2008,  08:18 Найти цитируемый пост)

Как и где правильно инициализировать поле fCV? Как сделать его константой? Че-то я не нашел в справке ничего похожего на class const?

Код

type
  T2 = class(TOBject)
  const
    fCV: String = 'qqqq';
  public
    constructor Create();
  end;



Добавлено через 8 минут и 48 секунд
Цитата(Felan @  21.5.2008,  08:18 Найти цитируемый пост)
Есть ли какие либо аналоги статических конструкторов или инициализаторов? 

  Это можно спокойно сделать в конструкторе класса, дело в том что в Delphi конструктор предка не вызывается автоматически, его нужно вызвать вручную при помощи ключевого слова inherited. В С++ конструктор предка вызывается строго в определенном месте, потому там есть необходимость в такой инициализации. И еще в делфи нельзя создавать статические объекты, потому опять же нет необходимости в инициализации, так как любой динамический объект необходимо сначало создать, а затем уже инициализировать. 


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Felan
Дата 21.5.2008, 11:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 284
Регистрация: 2.8.2007
Где: Самара

Репутация: 2
Всего: 7



Точно, че-то меня переклинило на class const.... То что надо. Далее чисто флейм smile

Цитата(Alexeis @  21.5.2008,  12:43 Найти цитируемый пост)
Это можно спокойно сделать в конструкторе класса, дело в том что в Delphi конструктор предка не вызывается автоматически, его нужно вызвать вручную при помощи ключевого слова inherited. В С++ конструктор предка вызывается строго в определенном месте, потому там есть необходимость в такой инициализации. И еще в делфи нельзя создавать статические объекты, потому опять же нет необходимости в инициализации, так как любой динамический объект необходимо сначало создать, а затем уже инициализировать.  

Ну во-первых это не статические поля, а поля класса. Точно разницу не помню, но это разные вещи. Во-вторых, причем здесь вызывается он автоматом или нет? Ну даже если и не вызывается, его все равно надо будет вызвать в каком-либо месте. И тогда будет произведена повторная инициализация.



--------------------
// Любая сложная система - это темный лес. Каждый в этом лесу протаптывает свои тропинки, по ним и бегает. Лишь изредка, сходя с них, мы находим много интересного, а порою и страшного.
PM MAIL WWW ICQ   Вверх
Alexeis
Дата 21.5.2008, 12:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 109
Всего: 459



Цитата(Felan @  21.5.2008,  10:47 Найти цитируемый пост)
Ну во-первых это не статические поля, а поля класса.

  Статические не в смысле static, а в смысле что создаются одновременно с объектом. В Delphi такого нет.  
Цитата(Felan @  21.5.2008,  10:47 Найти цитируемый пост)
Во-вторых, причем здесь вызывается он автоматом или нет?
 К тому что в Delphi нет необходимости во всяких статических конструкторах и инициализаторах, а в С++ для того чтобы проинициализировать переменную-поле до вызова конструктора предка приходиться пользоваться статическим конструктором.


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Felan
Дата 21.5.2008, 13:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 284
Регистрация: 2.8.2007
Где: Самара

Репутация: 2
Всего: 7



Цитата(Alexeis @  21.5.2008,  14:07 Найти цитируемый пост)
Статические не в смысле static, а в смысле что создаются одновременно с объектом. В Delphi такого нет.  

Это поля объекта.
А я говорю о полях класса.

Тпа
Class var
Class procedure
Разве они создаются с КЛАССОМ. А следовательно, возможно их надо будет инициализировать, и использовать до того, как будет создан хотя бы один объект.



--------------------
// Любая сложная система - это темный лес. Каждый в этом лесу протаптывает свои тропинки, по ним и бегает. Лишь изредка, сходя с них, мы находим много интересного, а порою и страшного.
PM MAIL WWW ICQ   Вверх
Alexeis
Дата 21.5.2008, 14:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 109
Всего: 459



Цитата(Felan @  21.5.2008,  12:06 Найти цитируемый пост)
А следовательно, возможно их надо будет инициализировать, и использовать до того, как будет создан хотя бы один объект.

  Ааа эти, они инициализируются точно также как и в C++ в любом месте где это допустимо. 
<имя класса>.<имя переменной класса> := Some_value;


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Felan
Дата 21.5.2008, 14:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 284
Регистрация: 2.8.2007
Где: Самара

Репутация: 2
Всего: 7



Так вот в том и вопрос, где их лучше, или положено, инициализировать. Если в конструкторе, то при каждом создании они будут переинициализироваться... так-то в принципе, не жалко... но вот для многопоточных приложений надо будет синхронизацию городить... В секции initialization - нарушается инкапсюляция... 

Перефразирую вопрос, есть ли специальные "секции"/места/методы для инициализации таких полей?


--------------------
// Любая сложная система - это темный лес. Каждый в этом лесу протаптывает свои тропинки, по ним и бегает. Лишь изредка, сходя с них, мы находим много интересного, а порою и страшного.
PM MAIL WWW ICQ   Вверх
Alexeis
Дата 21.5.2008, 15:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 109
Всего: 459



Цитата(Felan @  21.5.2008,  13:45 Найти цитируемый пост)
Так вот в том и вопрос, где их лучше, или положено, инициализировать.

Сам себе и отвечаешь
Цитата(Felan @  21.5.2008,  12:06 Найти цитируемый пост)
А следовательно, возможно их надо будет инициализировать, и использовать до того, как будет создан хотя бы один


  Разумеется логичным будет инициализировать их вне класса, в объекте, который будет их инстанцировать.


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0863 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.