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

Вниз

Приведение типов в наследниках   Найти похожие ветки 

 
Андрей Жук ©   (2005-08-09 14:58) [0]

Есть у нас базовый тип - TDBGrid.
Я реализовал его наследника, в котором добавил методы SaveToHTML, SaveToXLS etc.
В программе вызов идет так (например)
 TMyDBGrid(GetMainGrid).SaveToHTML(FileName, false);
Решил я использовать DBGridEh. Который наследует TCustomGrid.
Преобразование DBGridEh в DBGrid возможно обычным образом TDBGrid(DBGridEh)
Однако, когда я преобразовываю дальше в MyDBGrid, то при попытке считать свойство DataSource получаю AV.
Оно, конечно не проблема, потому что как я выяснил, у DBGridEh есть также свои методы сохранения.
Но что я делаю не так?


 
Digitman ©   (2005-08-09 15:06) [1]


> Однако, когда я преобразовываю дальше в MyDBGrid


TDBGridEh ничего не знает про TMyDBGrid

оба они наследники TCustomGrid, но совершенно разные

Петя - сын Вовы
 Федя - сын Пети
 Ваня - сын Пети
   Вася - сын Феди
   Иван - сын Вани

Вася НЕ обязан знать ничего о Ване.

Но при том и Вася и Ваня - непрямые потомки Пети.


 
Игорь Шевченко ©   (2005-08-09 15:07) [2]

As не проще ?


 
Андрей Жук ©   (2005-08-09 15:13) [3]

Забыл...
Это же, наверное, статическое преобразование. А нужно динамическое (в С++ так называются)


 
evvcom ©   (2005-08-09 15:32) [4]


> Преобразование DBGridEh в DBGrid возможно обычным образом
> TDBGrid(DBGridEh)

Это не преобразование. Это называется приведением типов. Если TDBGridEh унаследован от TDBGrid, то данное приведение типов попросту лишнее. Приведение же TMyDBGrid(DBGridEh) иногда сработает, иногда чревато:
1. Нормально отработают обращения к полям или вызовы любых методов, присутствующим у общего предка (TCustomGrid).
2. Статический метод из TMyDBGrid вызовется тоже нормально, но если в нем идет обращение к полям, отсутствующим в TCustomGrid, в лучшем случае получим AV, в худшем будет тихо нарушена логика работы программы, но в дальнейшем где-то скорее всего опять будет AV.
3. Вызов виртуального метода, отсутствующего в TCustomGrid, также приведет либо к AV, либо к нарушению логики работы.



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

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

Наверх




Память: 0.48 MB
Время: 0.04 c
14-1123143302
kblc
2005-08-04 12:15
2005.08.28
Debug


1-1123482149
leonidus
2005-08-08 10:22
2005.08.28
Быстрый алгоритм удаления одинаковыз записей


5-1094017910
segor
2004-09-01 09:51
2005.08.28
Редактор ячейки в TdxDBGrid


1-1123550320
Knop
2005-08-09 05:18
2005.08.28
Написание парсера


8-1113669884
Comrade
2005-04-16 20:44
2005.08.28
Видио во весь экран