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

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

Динамические типы в классах [WinXP]


DelphiLexx ©   (2008-10-29 16:14:00) 

Есть BDS2006, для простоты объяснения моего вопроса, приведу пример двух классов:

type
  TObjA = class
  ...
  end;
  TObjB = class(TObjA)
  ...
  end;
  TDynArrOfObjA = array of TObjA;
  TDynArrOfObjB = array of TObjB;

  TMyClass1 =  class(TObject)
  protected
     FObjList: TDynArrOfObjA;
     function GetObjList: TDynArrOfObjA;

  public
  ...    
     property ObjList: TDynArrOfObjA read GetObjList;

  end;
...
  function TMyClass1.GetObjList: TDynArrOfObjA;
  begin
     Result := FObjList;
  end;

  TMyClass2 =  class(TMyClass1)
  protected
     function GetObjList: TDynArrOfObjB;
  public
   ...    
     property ObjList: TDynArrOfObjB read GetObjList;
 end;
...
  function TMyClass2.GetObjList: TDynArrOfObjB;
  begin
     Result := TDynArrOfObjB(FObjList);
  end;

В чем у меня основная проблема, а вот в чем, когда я создаю класс TMyClass2 и заполняются FObjList, то при анализе корректности работы класса, я использую отладчик BDS2006, которые при наведение мыши на экземпляр класса TMyClass2 выводит Hint - дерево (через плючик (+) можно просмотреть всю начинку класса), так вот отладчик при просмотре FObjList[i] отображает поля (значения) только класса TObjA, а поля TObjB наследник от TObjA в этом Hint'e я не вижу. Как сделать так, чтобы всё же видеть в этом Hint'e поля TObjB элемента FObjList[i].


DevilDevil   (2008-10-31 13:55:00) [1]

Watches, Inspect, Evaluate/Modify ?


Kolan   (2008-10-30 17:40:00) [2]

Я бы забил. Напиши отладочную функцию, которая будет паказывать ShowMessage с нужными данными или писать их в лог.


DelphiLexx   (2008-10-30 13:17:00) [3]

???


DelphiLexx   (2008-10-29 17:20:00) [4]


> Наведи мышь на ObjList, что получишь?

в начале вопроса я сказал, что для простоты рассмотрю на 2-х классах, дело в том что TMyClass3 в котором есть arr: array of TMyClass2, тогда как?


Наиль   (2008-10-29 17:04:00) [5]

> Как? Я же говорю в Hint'e отображаются только значения FObjList,
> и отладчик думает, что он класса TObjA, а ObjList это св-
> во и в отладчике в Hint'e не отображается

Var
 MyObj2:TMyClass2;
begin
 ...
 blabla:=MyObj2.ObjList[index];
 ...
end;

Наведи мышь на ObjList, что получишь?


DelphiLexx   (2008-10-29 16:48:00) [6]


> 1. Смотреть отладчиком значение свойства ObjList класса
> TMyClass2.

Как? Я же говорю в Hint'e отображаются только значения FObjList, и отладчик думает, что он класса TObjA, а ObjList это св-во и в отладчике в Hint'e не отображается


> 2. Выделить мышью текст TDynArrOfObjB(FObjList) и навести
> на него мышь и посмотреть, что в хинте.

так ObjList в TMyClass2 это массив из TObjB (т.е. их  может быть много), поэтому если я  выделю мышью текст TDynArrOfObjB(FObjList) во-первых как отладчик поймет какой мне элемент из списка ObjList интересен, а во-вторых я же все равно не смогу смотреть значения всех элементов ObjList в Hint'e


Наиль   (2008-10-29 16:36:00) [7]

Не разумно подгонять код под отладчик, т.к. он (код) начинает делать то, для чего предназначен.
Я вижу два решения.
1. Смотреть отладчиком значение свойства ObjList класса TMyClass2.
2. Выделить мышью текст TDynArrOfObjB(FObjList)и навести на него мышь и посмотреть, что в хинте.


Наверх

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