![]() |
Модераторы: Poseidon, Snowy, bems, MetalFan |
![]() ![]() ![]() |
|
Felan |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 284 Регистрация: 2.8.2007 Где: Самара Репутация: 2 Всего: 7 |
Есть класс:
Как и где правильно инициализировать поле fCV? Как сделать его константой? Че-то я не нашел в справке ничего похожего на class const? Есть ли какие либо аналоги статических конструкторов или инициализаторов? -------------------- // Любая сложная система - это темный лес. Каждый в этом лесу протаптывает свои тропинки, по ним и бегает. Лишь изредка, сходя с них, мы находим много интересного, а порою и страшного. |
|||
|
||||
Alexeis |
|
||||||
![]() Амеба ![]() Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 109 Всего: 459 |
Добавлено через 8 минут и 48 секунд
Это можно спокойно сделать в конструкторе класса, дело в том что в Delphi конструктор предка не вызывается автоматически, его нужно вызвать вручную при помощи ключевого слова inherited. В С++ конструктор предка вызывается строго в определенном месте, потому там есть необходимость в такой инициализации. И еще в делфи нельзя создавать статические объекты, потому опять же нет необходимости в инициализации, так как любой динамический объект необходимо сначало создать, а затем уже инициализировать. -------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
||||||
|
|||||||
Felan |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 284 Регистрация: 2.8.2007 Где: Самара Репутация: 2 Всего: 7 |
Точно, че-то меня переклинило на class const.... То что надо. Далее чисто флейм
![]() Ну во-первых это не статические поля, а поля класса. Точно разницу не помню, но это разные вещи. Во-вторых, причем здесь вызывается он автоматом или нет? Ну даже если и не вызывается, его все равно надо будет вызвать в каком-либо месте. И тогда будет произведена повторная инициализация. -------------------- // Любая сложная система - это темный лес. Каждый в этом лесу протаптывает свои тропинки, по ним и бегает. Лишь изредка, сходя с них, мы находим много интересного, а порою и страшного. |
|||
|
||||
Alexeis |
|
|||
![]() Амеба ![]() Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 109 Всего: 459 |
Статические не в смысле static, а в смысле что создаются одновременно с объектом. В Delphi такого нет. К тому что в Delphi нет необходимости во всяких статических конструкторах и инициализаторах, а в С++ для того чтобы проинициализировать переменную-поле до вызова конструктора предка приходиться пользоваться статическим конструктором. -------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
Felan |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 284 Регистрация: 2.8.2007 Где: Самара Репутация: 2 Всего: 7 |
Это поля объекта. А я говорю о полях класса. Тпа Class var Class procedure Разве они создаются с КЛАССОМ. А следовательно, возможно их надо будет инициализировать, и использовать до того, как будет создан хотя бы один объект. -------------------- // Любая сложная система - это темный лес. Каждый в этом лесу протаптывает свои тропинки, по ним и бегает. Лишь изредка, сходя с них, мы находим много интересного, а порою и страшного. |
|||
|
||||
Alexeis |
|
|||
![]() Амеба ![]() Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 109 Всего: 459 |
Ааа эти, они инициализируются точно также как и в C++ в любом месте где это допустимо. <имя класса>.<имя переменной класса> := Some_value; -------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
Felan |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 284 Регистрация: 2.8.2007 Где: Самара Репутация: 2 Всего: 7 |
Так вот в том и вопрос, где их лучше, или положено, инициализировать. Если в конструкторе, то при каждом создании они будут переинициализироваться... так-то в принципе, не жалко... но вот для многопоточных приложений надо будет синхронизацию городить... В секции initialization - нарушается инкапсюляция...
Перефразирую вопрос, есть ли специальные "секции"/места/методы для инициализации таких полей? -------------------- // Любая сложная система - это темный лес. Каждый в этом лесу протаптывает свои тропинки, по ним и бегает. Лишь изредка, сходя с них, мы находим много интересного, а порою и страшного. |
|||
|
||||
Alexeis |
|
||||
![]() Амеба ![]() Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 109 Всего: 459 |
Сам себе и отвечаешь
Разумеется логичным будет инициализировать их вне класса, в объекте, который будет их инстанцировать. -------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
||||
|
|||||
![]() ![]() ![]() |
Правила форума "Delphi: Общие вопросы" | |
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |