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

Вниз

Динамические типы в классах   Найти похожие ветки 

 
DelphiLexx   (2008-10-29 16:14) [0]

Есть 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].


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

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


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


> 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 17:04) [3]

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

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

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


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


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

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


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

???


 
Kolan ©   (2008-10-30 17:40) [6]

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


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

Watches, Inspect, Evaluate/Modify ?



Страницы: 1 вся ветка

Текущий архив: 2009.11.22;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.013 c
3-1229485271
Karburator
2008-12-17 06:41
2009.11.22
уведомление из FireBird приложения


15-1253910608
Юрий
2009-09-26 00:30
2009.11.22
С днем рождения ! 26 сентября 2009 суббота


2-1255065282
Сергей Кропивин
2009-10-09 09:14
2009.11.22
Как в RichEdit Выделить строку после строки идентификатора?


15-1253626742
StriderMan
2009-09-22 17:39
2009.11.22
рынок "тяжелых" вычислений


3-1229490448
Sirus
2008-12-17 08:07
2009.11.22
Рекурсивный внешний ключ на саму запись