![]() |
|
Модераторы: Poseidon, Snowy, bems, MetalFan |
![]()
|
|
| Budy |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 616 Регистрация: 6.2.2004 Где: Екатеринбург Репутация: 1 Всего: 2 |
:Привествую
Есть код
При выполнении блока A создается объект класса TObject, при том TBaseCls.Create не выполняется, хотя указан этот класс. Помогите плиз выбрать нужный подход. Для блока A необходимо указать класс, от которого будет создан объект. Я написал обрезанный пример. Строю иерархическое дерево классов, а потому в блоке A не будет известен класс TBaseCls. -------------------- Как ты назовешь свой корабль, так на нем и напишут ![]() |
|||
|
||||
| cemick |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 416 Регистрация: 6.7.2006 Где: Санкт-Петербург Репутация: 2 Всего: 6 |
Чт я не понял, а зачем столь хитрый код, использование указателя на класс.. опишите более подробно задачу, что то мне подсказывает, что можно намного проще. |
|||
|
||||
| Budy |
|
||||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 616 Регистрация: 6.2.2004 Где: Екатеринбург Репутация: 1 Всего: 2 |
Хочу написать класс листинга с автоматическим созданием и удалением элементов.
Проблема в следующем. Есть класс
Когда создаю MyList, я должен указать класс, от которого должны создаваться элементы списка. MyList := TBaseList.Create(TMyClass); Потом я создаю список, например вот так: var o : Pointer; o := MyList.Add; TMyObject(o^).SampleProc; Дак вот это самое "чего-нибудь" не происходит. -------------------- Как ты назовешь свой корабль, так на нем и напишут ![]() |
||||||
|
|||||||
| cemick |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 416 Регистрация: 6.7.2006 Где: Санкт-Петербург Репутация: 2 Всего: 6 |
Передавать надо ссылку на класс
type TMyClassRef = class of TMyClass; |
|||
|
||||
| Budy |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 616 Регистрация: 6.2.2004 Где: Екатеринбург Репутация: 1 Всего: 2 |
хм... -------------------- Как ты назовешь свой корабль, так на нем и напишут ![]() |
|||
|
||||
| Budy |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 616 Регистрация: 6.2.2004 Где: Екатеринбург Репутация: 1 Всего: 2 |
Путем усиленных колебаний мозга во всех 8ми направлениях, пришел к такому виду (см.первый код):
Блок try..except..end; будет выдавать ошибку в случае если метод Init в объекте не описан. Как можно проверить существование метода в классе? -------------------- Как ты назовешь свой корабль, так на нем и напишут ![]() |
|||
|
||||
| Budy |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 616 Регистрация: 6.2.2004 Где: Екатеринбург Репутация: 1 Всего: 2 |
Разобрался самостоятельно. Всем спасибо за внимание. Если кому интересно, пришел к следующему:
-------------------- Как ты назовешь свой корабль, так на нем и напишут ![]() |
|||
|
||||
| cemick |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 416 Регистрация: 6.7.2006 Где: Санкт-Петербург Репутация: 2 Всего: 6 |
oh my god...
Я бы ваш код переделал так
Это сообщение отредактировал(а) cemick - 20.11.2009, 12:51 |
|||
|
||||
| Budy |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 616 Регистрация: 6.2.2004 Где: Екатеринбург Репутация: 1 Всего: 2 |
cemick, это тоже хороший способ, подобный мне уже предлагали. Но я выяснил, что при дебаге он не удобен. У меня около ста объектов создается таким образом при старте программы
В любом случае спасибо. -------------------- Как ты назовешь свой корабль, так на нем и напишут ![]() |
|||
|
||||
| cemick |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 416 Регистрация: 6.7.2006 Где: Санкт-Петербург Репутация: 2 Всего: 6 |
Я не к тому, что надо использовать try except EAbstractError(1. Можно добавить в список исключений которые не будут отлавливаться дебагером 2. Кто же знал что вам не важно, абстарктный метод или нет), а я к тому, что зачем вам работа с указателями, нафига GetMem и прочие, так писать просто не красиво. |
|||
|
||||
| Budy |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 616 Регистрация: 6.2.2004 Где: Екатеринбург Репутация: 1 Всего: 2 |
Хм... было бы полезно узнать как это сделать.
Привычка работать с памятью привязалась ко мне еще с Pascal'я. Более надеждного и удобного способа управления объектами для себя лично не вижу. -------------------- Как ты назовешь свой корабль, так на нем и напишут ![]() |
||||
|
|||||
| cemick |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 416 Регистрация: 6.7.2006 Где: Санкт-Петербург Репутация: 2 Всего: 6 |
Tools->Debuging Options -> Language Exceptions (Это в семерке)
Это не есть плюс, теряется наглядность и прозрачность кода, повышается вероятность ошибки |
|||
|
||||
| CodeMonkey |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1839 Регистрация: 24.6.2008 Где: Россия, Тверь Репутация: 38 Всего: 89 |
Вообще-то для этих целей есть такая вещь, как виртуальный конструктор и class of.
-------------------- Опытный программист на C++ легко решает любые не существующие в Паскале проблемы. |
|||
|
||||
| Budy |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 616 Регистрация: 6.2.2004 Где: Екатеринбург Репутация: 1 Всего: 2 |
Может у вас есть интересные примеры. Прошу выкладывайте -------------------- Как ты назовешь свой корабль, так на нем и напишут ![]() |
|||
|
||||
| CodeMonkey |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1839 Регистрация: 24.6.2008 Где: Россия, Тверь Репутация: 38 Всего: 89 |
Да пример-то будет почти так же, как у вас. Только уберите Init, засуньте его код в конструктор и объявите Create виртуальным.
-------------------- Опытный программист на C++ легко решает любые не существующие в Паскале проблемы. |
|||
|
||||
![]()
|
| Правила форума "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. |