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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> можно ли получить список классов? 
:(
    Опции темы
CROTishka
Дата 9.2.2011, 13:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



есть необходимость получить список классов - наследников одного родительского класса, и положить их в коллекцию.
в яве можно сделать запись в коллекцию в инициализаторе родительского класса, тогда все наследники сами туда пропишутся. как сделать подобное в делфи?
PM MAIL   Вверх
SPrograMMer
Дата 10.2.2011, 12:19 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Спамер :)
**


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

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



Цитата(CROTishka @  9.2.2011,  13:49 Найти цитируемый пост)
в яве можно сделать запись в коллекцию в инициализаторе родительского класса, тогда все наследники сами туда пропишутся

поступайте подобным образоми в дельфи, есть ведь конструктры


--------------------
животное = зверь
законченный гентушник
PM MAIL ICQ Jabber   Вверх
Akella
Дата 10.2.2011, 12:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 36
Всего: 329



а через RTTI никак нельзя?
PM MAIL   Вверх
MetalFan
Дата 10.2.2011, 15:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Аццкий Сотона
****


Профиль
Группа: Комодератор
Сообщений: 3815
Регистрация: 2.10.2006
Где: Moscow

Репутация: 62
Всего: 128



Akella, Вроде как в 2010 уже можно.
В хелпе описано (раздел: Working with RTTI).
Пример:
Цитата

Class References (Metaclasses) 
Class reference types are described by TRttiClassRefType class instances. TRttiClassRefType allows obtaining the class type that is used for the base of the hierarchy denoted by the metaclass (using the InstanceType property). TRttiClassRefType also provides direct access to the metaclass itself, through MetaclassType. 

The following example prints all the metaclass types declared in the application or its packages; they represent types that are derived from TComponent: 

Код

var
  LContext: TRttiContext;
  LType: TRttiType;
  LMeta: TRttiClassRefType;
begin
  { Obtain the RTTI context }
  LContext := TRttiContext.Create;
 
  { Get all types that are class references and whose class inherits from TComponent }
  for LType in LContext.GetTypes() do
    if (LType is TRttiClassRefType) then
    begin
      { Typecast the Rtti type class }
      LMeta := TRttiClassRefType(LType);

      if (LMeta.MetaclassType.InheritsFrom(TComponent)) then
      begin
        Writeln('The metaclass type name is ', LType.Name);
        Writeln('The hierarchy starts at ', LMeta.InstanceType.Name);
      end;
    end;
end.


Но проще имхо как SPrograMMer сказал


--------------------
There are always someone smarter than you...
PM MAIL   Вверх
CROTishka
Дата 14.2.2011, 12:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Цитата

поступайте подобным образоми в дельфи, есть ведь конструктры 

вы путаете инициализацию и конструктор. 
для того, чтобы работала предложенная вами конструкция,  необходимо написать что-то вроде:
Код

        TChild1.Create
        TChild2.Create
        TChild3.Create
        TChild4.Create

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

2MetalFan: Спасибо огромное! Буду разбираться.
PM MAIL   Вверх
bems
Дата 14.2.2011, 15:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 3400
Регистрация: 5.1.2006

Репутация: 31
Всего: 88



CROTishka, пользуй class constructor


--------------------
Обижено школьников: 8
PM MAIL   Вверх
RomanEEP
Дата 15.2.2011, 09:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

Репутация: 5
Всего: 8



я тоже так думал, но class constructor вызывается единожды, а не для каждого наследника
PM MAIL   Вверх
bems
Дата 15.2.2011, 16:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 3400
Регистрация: 5.1.2006

Репутация: 31
Всего: 88



RomanEEP, да, я имел в виду создание у каждого наследника, с вызовом унаследованного метода регистрации. Согласен, не феншуй


--------------------
Обижено школьников: 8
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

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

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

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

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


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

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


 




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


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

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