![]() |
|
Модераторы: Poseidon, Snowy, bems, MetalFan |
![]()
|
|
| shmelina |
|
||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 66 Регистрация: 5.6.2009 Репутация: нет Всего: нет |
У меня есть базовый класс. От него есть наследники.
В записимости от параметра конструктора мне нужно создавать или базовый класс или кого-то из его наследников. Я сделал отдельную процедуру для этого:
Сейчас пока всего два унаследованных класса, но их будет много. Мне не очень нравится многоэтажная конструкция IF. Есть ли способ попроще? Мне бы хотелось какой-нить константный массив сделать. А в этой процедуре пробегать по маассиву и создавать нужный класс. Нечто подобное я делал, но с рекордами:
Есть идеи? |
||||
|
|||||
| Frees |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2233 Регистрация: 2.12.2005 Где: Екатеринбург Репутация: 9 Всего: 54 |
вот как то так
Это сообщение отредактировал(а) Frees - 19.6.2009, 14:53 -------------------- Кольцов Виктор Владимирович |
|||
|
||||
| Rennigth |
|
||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1708 Регистрация: 21.6.2004 Где: Moscow Репутация: 49 Всего: 76 |
Зачем вообще эти извращения? передавай в коструктор класс твоего объекта. Класс обявляется так:
Для всех твоих классов объяви, и передавай нужный. Будет что-то вроде:
-------------------- (* Honesta mors turpi vita potior *) |
||||
|
|||||
| shmelina |
|
||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 66 Регистрация: 5.6.2009 Репутация: нет Всего: нет |
Не получается с классами, у которых в конструкторе есть параметры. |
||||
|
|||||
| shmelina |
|
||||||||||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 66 Регистрация: 5.6.2009 Репутация: нет Всего: нет |
В том то и проблема, что мне нужно определить какой класс создавать. Определение получается многоэтажным IF-ом. Этого и хочется избежать и сделать все как-то через массив. Еще раз опишу задачу. 1. Есть некий класс, обладающий стандартной функциональностью. 2. Есть наследники, обладающие измененной функциональностью. 3. Какой именно класс создавать отпределяется неким параметром. Этот параметр передается в конструктор класса (но это не важно). 4. Смущает многоэтажный IF, который я использую для определения того, какой класс создавать.
5. Хочется сделать все как-то через массив. Т.е. пусть в массиве содержится список классов (или конструкторов?) и условий для них. Так это смотрится гораздо изящнее. Ну например так:
А процедура для создания класса - примерно так:
Это сообщение отредактировал(а) shmelina - 25.6.2009, 09:31 |
||||||||||||
|
|||||||||||||
| cemick |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 416 Регистрация: 6.7.2006 Где: Санкт-Петербург Репутация: 2 Всего: 6 |
Это сообщение отредактировал(а) cemick - 25.6.2009, 19:18 |
|||
|
||||
| shmelina |
|
||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 66 Регистрация: 5.6.2009 Репутация: нет Всего: нет |
Не совсем понял, что ты хотел сказать, но: 1. Мне не нужно объекты сразу создавать. Одна из причин - может быть создано несколько объектов одного класса. 2. Ты не решил проблему выбора какой именно объект создавать. Опять многоэтажный IF? |
||||
|
|||||
| cemick |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 416 Регистрация: 6.7.2006 Где: Санкт-Петербург Репутация: 2 Всего: 6 |
Тебе нужно было хранить классы в массиве, а потом динамически, на основе индекса например, создать объекты, я тебе показал как хранить класс в массиве можно и как создать объект, я не писал код за тебя. Ты же сам хотел что то наподобии:
Это сообщение отредактировал(а) cemick - 26.6.2009, 12:03 |
|||
|
||||
| jsa |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 704 Регистрация: 19.1.2006 Где: Новосибирск Репутация: 1 Всего: 20 |
shmelina, смотри в сторону RegisterClass, FindClass и будет тебе счастье
разом и от массивов избавишься и от if'ов Добавлено через 9 минут и 56 секунд только учти, что базовый класс должен наследоваться от как минимум от TPersistent -------------------- Все мы, на перине с песней, строим небо на земле © Ю. Шевчук |
|||
|
||||
| shmelina |
|
||||||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 66 Регистрация: 5.6.2009 Репутация: нет Всего: нет |
У меня скомпилировать не получалось это:
Сейчас сообразил сделать так:
Но при попытке создать объект получаю AV. Ошибка в этом месте:
Такое ощущение, что я не правильно создаю класс. Спотыкается на простейшей операции присваивания! Не смотрите, что количество параметров в конструкторе вдруг другое. Я просто перед этим упрощал для вас. Это сообщение отредактировал(а) shmelina - 29.6.2009, 12:27 |
||||||||
|
|||||||||
| cemick |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 416 Регистрация: 6.7.2006 Где: Санкт-Петербург Репутация: 2 Всего: 6 |
свойство Owner read only. Передавай его inherited create (AOwner); Это сообщение отредактировал(а) cemick - 29.6.2009, 12:38 |
|||
|
||||
| shmelina |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 66 Регистрация: 5.6.2009 Репутация: нет Всего: нет |
Это мое свойство. Оно не ReadOnly. Думаю если бы оно было ReadOnly, то ошибка была бы не AV, а что-то другое. С многоэтажным IF-ом все работает. А как только я переделываю на массив с циклом - ошибка. |
|||
|
||||
| Frees |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2233 Регистрация: 2.12.2005 Где: Екатеринбург Репутация: 9 Всего: 54 |
может у тебя конструктор потомка не вызывается, а только конструктор родителя?
объяви как то так конструкторы попробуй
-------------------- Кольцов Виктор Владимирович |
|||
|
||||
| shmelina |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 66 Регистрация: 5.6.2009 Репутация: нет Всего: нет |
У потомков нет констуруктора. Только некоторые функции переопределены.
|
|||
|
||||
| Frees |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2233 Регистрация: 2.12.2005 Где: Екатеринбург Репутация: 9 Всего: 54 |
ерунда полная!!! ClassName - это строка а не ссылка на класс!!! Добавлено @ 12:56 пардон не то посмотрел для начала
и еще
паардон если чет не понял запутался я в этом топике Это сообщение отредактировал(а) Frees - 29.6.2009, 12:59 -------------------- Кольцов Виктор Владимирович |
||||
|
|||||
![]()
|
| Правила форума "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. |