Форум: "Основная";
Текущий архив: 2003.02.20;
Скачать: [xml.tar.bz2];
ВнизКак в рантайме заменить один комп. на другой с таким же именем? Найти похожие ветки
← →
vasilly (2003-02-11 19:48) [0]т.е. объявлено A: TType1... а некоторый момент времени сделать A.Free; после чего A:= TType2.Create()...
Такое взможно??
← →
Anatoly Podgoretsky (2003-02-11 19:51) [1]Возможно
← →
vasilly (2003-02-11 19:53) [2]Как?? если не секрет.. я только что попробывал у мен не вышло :(
← →
vasilly (2003-02-11 20:06) [3]? кто еще знает :)
← →
Anatoly Podgoretsky (2003-02-11 20:10) [4]Так как ты написал, типы TType1 и TType2 должны быть совместимыми, то есть один должет быть наследником.
← →
vasilly (2003-02-11 20:12) [5]Проблема в том что эти два класса имеют только несколько методов с общими названиями.... наследника общего нет. Мне необходимо в одном случае пользовать один клас...а в другом совершенно другой :) ну например, если сравнить бде и адо компоненты.. то сначала через бде, затем обращаясь к тому же (якобы компоненту) через адо
← →
vasilly (2003-02-11 20:13) [6]такое возможно?...именоо что они не наследники одного класса
← →
Anatoly Podgoretsky (2003-02-11 20:19) [7]Наследние есть всегда, как минимум от TObject, кроме того никто не мешает сделать базовый класс с абстрактными методами.
← →
Романов Р.В. (2003-02-11 20:19) [8]
> Мне необходимо в одном случае пользовать один клас...а в
> другом совершенно другой
А почему бы не сделать на них отдельные указатели.
> именоо что они не наследники одного класса
По крайней мере они должны быть наследниками TObject
← →
vasilly (2003-02-11 20:20) [9]Точнее вопрос как изменить compiler-generated runtime type information ? Получить то ее можно, а вот как сказать что она совсем другая уже?
← →
vasilly (2003-02-11 20:22) [10]общий наследник у них есть, базовый клас сделать уже не возможно...
немогу же я переписать VCL.. :)
← →
Романов Р.В. (2003-02-11 20:25) [11]
> Точнее вопрос как изменить compiler-generated runtime type
> information
Что то ты все усложняешь. Для чего это?
← →
vasilly (2003-02-11 20:41) [12]
var
Query: TQuery;
begin
Query:= TQuery.Create( Self);
CompName:= Components[i].Name;
Components[i].Free;
Query.Name:= CompName;
end
Components[i] - TADOQuery
← →
Романов Р.В. (2003-02-11 21:00) [13]var
Query: TDataSet;
begin
// Работаем с БДЕ
Query := TQuery.Create( Self);
TQuery(Query).SQL.Add(...
Query.Open;
Query.Free;
// Работаем с АДО
Query = Components[i] // Components[i] - TADOQuery
TADOQuery(Query).SQL.Add(...
Query.Open;
Query.Free;
end;
← →
Vit@ly (2003-02-11 21:11) [14]Аккуратней со словом комп. На существующем сленге это то-ли компьютер, то-ли компонент, что ближе к обсуждениям на форуме. Мне кажется, что не стоит экономить на всякого рода сокращениях
← →
y-soft (2003-02-11 21:36) [15]Есть еще варианты
1. Объявить интерфейс и написать компоненты-потомки искомых с поддержкой этого интерфейса. Потом объявить переменную типа этого интерфейса и делать с ней все, что угодно (внутренняя реализация COM)
type
IQuery = interface
procedure Open;
procedure Close;
.....................
end;
TInterfacedQuery = class(TQuery, IQuery)
........................................
TInterfacedADOQuery = class(TADOQuery, IQuery)
.........................................
var
InterfacedQuery : IQuery;
Query : TQuery;
ADOQuery : TADOQuery;
Query := TQuery.Create(Self);
ADOQuery := TADOQuery.Create(Self);
InterfacedQiery := Query as IQuery;
with InterfacedQuery do
begin
Open;
............
Close;
end;
InterfacedQiery := ADOQuery as IQuery;
with InterfacedQuery do
begin
Open;
............
Close;
end;
................................
2. Использовать инкапсуляцию. Написать базовый класс-оболочку, а в его потомках уже обеспечивать работу с нужными классами. Использовать переменную типа этого базового класса для динамической смены инкапсулированных классов
← →
vasilly (2003-02-11 21:48) [16]
> 1. Объявить интерфейс и написать компоненты-потомки искомых
> с поддержкой этого интерфейса. Потом объявить переменную
> типа этого интерфейса и делать с ней все, что угодно (внутренняя
> реализация COM)
Спасибо огромное, это наверное то что нужно:)) что то я про это и не подумал..
← →
y-soft (2003-02-11 22:04) [17]>vasilly © (11.02.03 21:48)
Только не забудьте методы интерфейса в классах-потомках реализовать :)
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2003.02.20;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.013 c