Форум: "Основная";
Текущий архив: 2005.08.28;
Скачать: [xml.tar.bz2];
ВнизПриведение типов в наследниках Найти похожие ветки
← →
Андрей Жук © (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;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.041 c