![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как получить инфо о property, об`явленом НЕ published?
i-am-vladko © (2006-09-07 19:58:00)Как получить инфо о property, об`явленом НЕ published, run-time?
DiamondShark (2006-09-09 13:39:00) [1]
> i-am-vladko © (08.09.06 17:41) [51]
Пусть элементы списков реализуют интерфейс
IComparable = interface
['{4A41D8E3-BFFE-4D65-B34F-1731FEDCA490}']
function IsEqual(AObject: TObject): boolean;
end;
Тогда смело можно выносить в TF_Base обобщённую процедуру поиска
Джо (2006-09-08 20:34:00) [2]> [51] i-am-vladko © (08.09.06 17:41)
Что значит "поиск" поля применительно к классу, который известен на этапе компиляции? Если он известен, то уже известны и имена его полей. Тут путаница какая-то, мне кажется.
Если же просто не известен конкретный потомок объекта в списке (например, в обобщенном списке), то всегда можно применить оператор is.
default (2006-09-08 18:02:00) [3]i-am-vladko © (08.09.06 17:41) [51]
тут безусловно можно исправить положение
надо просто иерархию проектировать продуманно
вот посмотреть бы хотя бы на два класса TF_Base и, например, на TF1_list
i-am-vladko (2006-09-08 17:41:00) [4]>что конкретно значит "очень уж похожи методы в разных классах. " и тд и >тп
Конкретый пример:
поиск об`екта класса TF1 в TF1_List, где TF1 - поле, c параметром parObj1:
<цикл>
если (ObjF1.Field_1 = parObj1.Field_1) and
......................................
(ObjF1.Field_n = parObj1.Field_n) then
то искомый об`ект.
принципиально тот же поиск, в том же классе, но TF1_List состоит из об`ектов TF2 :
<цикл>
если (ObjF2.Field2_1 = parObj2.Field2_1) and
......................................
(ObjF2.Field2_n = parObj2.Field2_n) then
то искомый об`ект.
тот же поиск в совершенно другом классе, TF2_list,
если (ObjF3.Field3_1 = parObj3.Field3_1) and
......................................
(ObjF3.Field3_n = parObj3.Field3_n) then
то искомый об`ект.
Причем и TF1_list, TF2_list i TF3_list - наследники TF_Base
Была мысль етот поиск наследовать из TF_Base...
default (2006-09-08 16:58:00) [5]i-am-vladko © (08.09.06 16:52) [49]
рекомендую подробно изложить условия
возможно есть пути оптимизации
что конкретно значит "очень уж похожи методы в разных классах. " и тд и тп
i-am-vladko (2006-09-08 16:52:00) [6]Да, классы наши (совместный проект).
default (2006-09-08 16:42:00) [7]i-am-vladko © (08.09.06 16:21) [47]
единообразие обработки объектов достигается через наследование или интерфейсы
классы-то тобой писаны?
i-am-vladko (2006-09-08 16:21:00) [8]Пора закрывать тему...
Новые классы в программе не появляются, хотя сделать ето можно (для новичков (шутка ;-) ) http://www.paxscript.com), но не нужно в моей ситуации.
В данной реализации хотелось сократить код, очень уж похожи методы в разных классах. Достаточно было прописать один - в базовом.
Ето никак не получится (не published, невозможно взять имя), а жаль.
Ketmar (2006-09-08 15:31:00) [9]"мастера на форуме играли в гестапо"... не в рифму, размер хромает, но как жизненно! %-)
Наиль (2006-09-08 14:40:00) [10]
> программе появляются новые в RunTime
следует читать программе появляются новые классы в RunTime
PS.
1. Ох уж эти железные клещи
2. И чем тебе пожет DLL?
Наиль (2006-09-08 14:36:00) [11]
> за щкафом )) подскажи лучше как сделать
Ещё раз повторю. Нет класса - нет доступа к его методам, есть класс (а появиться в RunTime он не может), то имена методов известны заранее, тогда см. [29]
Раз это тебе не подходит, то значит у тебя особая ситуация. Для особой ситуации нужно особое решение. Опиши ситуацию (как так получается, что в твоей программе появляются новые в RunTime), и тогда ты узнаешь "как лучше сделать"
i-am-vladko (2006-09-08 14:31:00) [12]ОК. попробую DLL...
DiamondShark (2006-09-08 14:29:00) [13]
> подскажи лучше как сделать
Уже подсказали: для не-published членов после компиляции никаких имён не существует.
Тебе пытаются помочь решить задачу, не реализовать какой-то узкоспециализированный механизм, а именно прикладную задачу.
А ты упираешься.
Ну, не хочешь -- никто не заставляет.
i-am-vladko (2006-09-08 14:21:00) [14]за щкафом )) подскажи лучше как сделать
Наиль (2006-09-08 14:19:00) [15]Мне тут вспомнился Digitman.
Помнится я его пожалел, сказав что ему приходится целыми днями железными клещами вытаскивать информацию у новичков и начинающих.
Теперь и я на его месте.
Наиль (2006-09-08 14:15:00) [16]
> Блин... поиск фильда, сортировки, сравнения - максимально
> унифщцировать
А зачем?
i-am-vladko (2006-09-08 14:11:00) [17]Блин... поиск фильда, сортировки, сравнения - максимально унифщцировать
Джо (2006-09-08 14:03:00) [18]> [35] i-am-vladko © (08.09.06 14:00)
> Да вроде ясно должно быть... входящие параметры - имя (Property
> : string, тип : string). Из любого класса пишем имя, тип
> - получаем значение поля для етого класса.
Рискну, еще раз заметить, что это не "задача", а подробности реализации.
Наиль (2006-09-08 14:02:00) [19]Поясняю свой вопрос
> Да вроде ясно должно быть... входящие параметры - имя (Property
> : string, тип : string). Из любого класса пишем имя, тип
> - получаем значение поля для етого класса.
А зачем?
i-am-vladko (2006-09-08 14:00:00) [20]Да вроде ясно должно быть... входящие параметры - имя (Property : string, тип : string). Из любого класса пишем имя, тип - получаем значение поля для етого класса.