Форум: "Начинающим";
Текущий архив: 2011.02.13;
Скачать: [xml.tar.bz2];
ВнизНаследники Найти похожие ветки
← →
mfender (2010-11-13 18:16) [0]Есть какой-то класс (TPersistent) и у него куча потомков. Вот как добыть предков класса - понятно (ClassParent). А как всех потомков найти?
← →
Медвежонок Пятачок © (2010-11-13 18:22) [1]А как всех потомков найти?
парент алименты не платит?
← →
Юрий Зотов © (2010-11-13 19:41) [2]В общем случае - никак. А в конкретном и смотреть надо конкретно. Например, классы могут где-то регистрироваться, тогда будет можно.
← →
mfender (2010-11-17 13:07) [3]Если я правильно понял, "регистрируются" - это RegisterClasses? Да, они регистрируются таким образом. Иначе их вообще никто не видит и не слышит, потому что с ними общение в основном через RTTI.
← →
Медвежонок Пятачок © (2010-11-17 13:49) [4]ну так если они явно регистрируются через RegisterClass, то что мешает при регистрации вносить классы в свой список?
← →
Юрий Зотов © (2010-11-17 14:38) [5]
> mfender (17.11.10 13:07) [3]
> Если я правильно понял, "регистрируются" - это RegisterClasses?
Не обязательно. Например, никто не мешает создать свой список (или даже дерево) классов и регистрировать в нем.
← →
DVM © (2010-11-17 15:19) [6]
> mfender (13.11.10 18:16)
> А как всех потомков найти?
А ЗАЧЕМ?
← →
clickmaker © (2010-11-17 15:29) [7]> А ЗАЧЕМ?
заплатить таки алименты )
← →
Юрий Зотов © (2010-11-17 15:42) [8]
> DVM © (17.11.10 15:19) [6]
Задачи разные бывают. Например, Object Browser в IDE.
← →
DVM © (2010-11-17 17:35) [9]
> Юрий Зотов © (17.11.10 15:42) [8]
> Object Browser в IDE.
Сдается мне что он дерево строит не снизу вверх, а сверху вниз.
Я потому и спросил, что именно в такой постановке снизу вверх я не могу придумать задачу, где такое было бы необходимо.
← →
DVM © (2010-11-17 17:40) [10]
> Object Browser в IDE.
К тому же скорее всего в данном случае дерево строится просто на основе разбора исходного кода, он же еще не компилирован.
← →
DVM © (2010-11-17 17:44) [11]Вообще сама задача (найти потомков TPersistent) весьма странная. Найти где?
Во всей VCL или той части, что используется конкретной программой?
Или в папке, в которой лежит куча модулей в которых есть классы и дерево надо построить по исходным кодам.
← →
mfender (2010-11-18 02:10) [12]Нет, найти их нужно в run-time.
Есть класс TKakoitoClass = class(TPersistent)
И у него несколько потомков (TClass1 = class(TKakoitoClass) ..... TClassN = class(TKakoitoClass)).
← →
Германн © (2010-11-18 02:24) [13]
> mfender (18.11.10 02:10) [12]
>
> Нет, найти их нужно в run-time.
>
Зачем?
Очередной раз задача xyz?
← →
Германн © (2010-11-18 03:22) [14]В run-time искать некие классы имеет право только ЮЗ. (Ну и ещё некоторые, ну так два-три. Не более! :)
Только они понимают что они ищут и для чего ищут!
← →
KSergey © (2010-11-18 16:04) [15]Надо искать именно классы-потомки, или созданные на момент поиска экземпляры этих классов?
← →
mfender (2010-11-21 14:48) [16]
> В run-time искать некие классы имеет право только ЮЗ. (Ну
> и ещё некоторые, ну так два-три. Не более! :)
понимаю ваш пиэтет к этим людям, сам к ним отношусь с почтением, в частности к ЮЗ. Но мы тут смертные иногда тоже не пальцем деланы. я маленький человек, программирование - хобби, и форум тут "начинающим" называется. Вот я и спрашиваю совета. Совета, а не высокопарного "погугли, лошара". Если не понятно, ещё раз: программирование - хобби, и всё что я делаю - только для себя. Не зарабатываю на этом денег. Мне просто интересно. Когда я чего-то достигаю-постигаю - рад до усёру. А когда что-то не понятно - спрашиваю. В основном здесь, опять же потому, что есть такие люди как ЮЗ, которые способны адекватно и по теме ответить на поставленный вопрос.
← →
mfender (2010-11-21 14:49) [17]
> KSergey © (18.11.10 16:04) [15]
> Надо искать именно классы-потомки, или созданные на момент
> поиска экземпляры этих классов?
Классы-потомки. Те объекты что созданны мне не нужны. Мне нужно просто буквы названий классов.
← →
Германн © (2010-11-21 15:05) [18]
> Мне нужно просто буквы названий классов
"A".."Z"
Ты бы все таки уточнил что это за классы-потомки? Кем они разработаны и когда?
← →
DVM © (2010-11-21 16:21) [19]
> mfender
> Те объекты что созданны мне не нужны.
Если класс не используется в программе он не попадет в исполняемый файл и что ты там собрался искать не понятно. Это бессмысленно.
← →
DVM © (2010-11-21 16:23) [20]
> mfender
вот тут тоже такой же ерундой кто-то мается http://www.sql.ru/forum/actualthread.aspx?tid=767406
← →
Германн © (2010-11-21 16:37) [21]
> Если класс не используется в программе он не попадет в исполняемый
> файл
<telepator>
Плугин?
</telepator>
:)
← →
DVM © (2010-11-21 16:43) [22]
> Германн © (21.11.10 16:37) [21]
Я его уже спрашивал, зачем это надо? Молчит.
> Плугин?
Если плагин в DLL там все еще более сложно становится, в каждой DLL своя RTTI и TPersistent в разных плагинах и основной программе - это все разные классы, полностью до байта может идентичные, но разные там не менее.
В RTTI надо копаться - там списки всех классов и прочее. В D2010 есть модуль RTTI с его помощью можно получить список классов. По сссылке на форум SQL там есть вроде пример его использования, я не проверял работает или нет.
← →
Германн © (2010-11-21 16:49) [23]
> Я его уже спрашивал, зачем это надо
Я тоже спрашивал. Вот и решил погадать на кофейной гуще. :)
← →
_oxffff (2010-11-21 20:50) [24]
> mfender (13.11.10 18:16)
> Есть какой-то класс (TPersistent) и у него куча потомков.
> Вот как добыть предков класса - понятно (ClassParent).
> А как всех потомков найти?
В рамках одного приложения?
uses rtti;
context:=TRttiContext.create;
context.GetTypes: TArray<TRttiType>;
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2011.02.13;
Скачать: [xml.tar.bz2];
Память: 0.5 MB
Время: 0.003 c