Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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.004 c
3-1252993240
Димон
2009-09-15 09:40
2011.02.13
Помогите написать запрос, пожалуйста


13-1126698314
ilya39
2005-09-14 15:45
2011.02.13
Взаимодействие потоков в C#


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


2-1290417334
Иван
2010-11-22 12:15
2011.02.13
StringGrid.Rows[].Objects


15-1286801210
NailMan
2010-10-11 16:46
2011.02.13
Закрыл сезон FPV





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский