Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как получить инфо о property, об`явленом НЕ published?


Страницы:   1 2 3

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). Из любого класса пишем имя, тип - получаем значение поля для етого класса.


Страницы:   1 2 3

Наверх

Титульная страница Поиск, карта сайта Написать письмо