Главная страница
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.05 c
3-1121764781
Андрей Жук
2005-07-19 13:19
2005.08.28
Баг в DCL Firebird 1.5.2


1-1123600501
_Андрей
2005-08-09 19:15
2005.08.28
Создание формы в потоке, функция которого находится в DLL


3-1121621163
redlord
2005-07-17 21:26
2005.08.28
запрос sql: если есть изменить запись если нет то добавить запись


14-1123252381
Джо
2005-08-05 18:33
2005.08.28
Фотошоп или натура?


8-1113670104
Comrade
2005-04-16 20:48
2005.08.28
TraсkBar для Mediaplayer