Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.46 MB
Время: 0.022 c
1-1123516665
Zer0
2005-08-08 19:57
2005.08.28
запуск метода сразу после заверщения работы FormCreate


14-1123089550
DillerXX
2005-08-03 21:19
2005.08.28
Что вы знаете про...


1-1123484706
Новичёк
2005-08-08 11:05
2005.08.28
DLL и его процедуры и функции


14-1122969123
Суслик
2005-08-02 11:52
2005.08.28
Няня


9-1114875564
Forexs
2005-04-30 19:39
2005.08.28
Вопрос по Forex-у




   Наверх