Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2011.02.13;
Скачать: CL | DM;

Вниз

Наследники   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.52 MB
Время: 0.014 c
15-1288379376
TUser
2010-10-29 23:09
2011.02.13
Шестеренки


2-1290602937
12
2010-11-24 15:48
2011.02.13
Цикл не выполняется, что может быть?


15-1288164422
Олег Крапивин
2010-10-27 11:27
2011.02.13
Ссылочку на спрвочник API. Пожалуйста!


3-1252902466
Павел
2009-09-14 08:27
2011.02.13
база данных Access mdb


2-1290508252
Darvin
2010-11-23 13:30
2011.02.13
D2009 Не работают точки останова