Текущий архив: 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