Форум: "Начинающим";
Текущий архив: 2010.09.19;
Скачать: [xml.tar.bz2];
ВнизТип как массив компонентов заданного типа Найти похожие ветки
← →
nobody (2010-06-24 15:34) [0]Как объявить сабж, который может содержать только объекты определенного типа?
например:
TOraObject1 = set of [TOracleDataset, TOracleQuery];
но мне нужно
TOraObject2 = array of [TOracleDataset, TOracleQuery];<-Error
Православно ли будет объявить
TOraObject2 = array of TOraObject1?
← →
RWolf © (2010-06-24 15:37) [1]TOracleQuery — это ведь производный класс от TOracleDataset?
если так, то ответ:TMyArray = array of TOracleDataset;
← →
nobody (2010-06-24 15:38) [2]
> TOracleQuery — это ведь производный класс от TOracleDataset?
увы и ах
← →
nobody (2010-06-24 15:39) [3]TOracleQuery = class(TComponent)
TOracleDataSet = class(TDataSet)
← →
RWolf © (2010-06-24 15:41) [4]пусть будет
array of TComponent
.
Пользоваться так:(MyArray[i] as TOracleDataset).Open;
← →
nobody (2010-06-24 15:46) [5]
> пусть будет array of TComponent
это понятно.
просто хотелось бы накладывать ограничения на входящий тип, если такое возможно языковой конструкцией...
← →
RWolf © (2010-06-24 15:50) [6]массив — по определению набор элементов одинакового типа, так что можно только указать при его объявлении тип базового предка, а в программе приводить его к типам потомков.
← →
nobody (2010-06-24 15:51) [7]
> массив — по определению набор элементов одинакового типа
а как на счет VarArrayOf ?
← →
RWolf © (2010-06-24 15:53) [8]Собственно, проверку можно делать при добавлении нового элемента:
if element is TOracleDataset then …
← →
RWolf © (2010-06-24 15:54) [9]
> а как на счет VarArrayOf ?
это тоже элементы одного типа — Variant.
← →
nobody (2010-06-24 15:57) [10]вот или что-то в таком духе, но оно тоже не проходит
TOratype = set of [TOracleDataSet,TOracleQuery];
TOraObject = record
case TOratype of
TOracleDataSet:DataSet;
TOracleQuery:Query;
end;
end;
← →
nobody (2010-06-24 15:58) [11]похоже, извратиться не получится...
← →
RWolf © (2010-06-24 16:02) [12]ну, в принципе, можно извратиться как-то так:
TOraObject = record
case byte of
0: (DataSet:TOracleDataSet;);
1: (Query:TOracleQuery;);
и т.п.
end;
← →
nobody (2010-06-24 16:08) [13]а как такой конструкцией пользоваться?
как проводить проверку, какого типа поле?
← →
RWolf © (2010-06-24 16:16) [14]
> а как такой конструкцией пользоваться?как проводить проверку,
> какого типа поле?MyArray[i].DataSet := OracleDataSet1;
MyArray[j].Query := TOracleQuery1;
if MyArray[k].DataSet is TOracleDataSet then …
← →
nobody (2010-06-24 16:30) [15]
>
> MyArray[i].DataSet := OracleDataSet1;
> MyArray[j].Query := TOracleQuery1;
>
> if MyArray[k].DataSet is TOracleDataSet then …
если присвоенно полю MyArray[k].DataSet, то в любом случае там будет тип TOracleDataSet - это же очевидно из определения записи
может условие проверки будет что-то типа
if Assigned(MyArray[i].DataSet) then ... ?
← →
nobody (2010-06-24 16:38) [16]кстати
TOraObject = record
case byte of
0: (DataSet:TOracleDataSet;);
1: (Query:TOracleQuery;);
и т.п.
end;
TArrayOfOraObject = array of TOraObject и дает нам массив элементов заданных типов.
Что и требовалось доказать)
2RWolf - лучи добра тебе, камрад!:)
← →
RWolf © (2010-06-24 16:45) [17]
> если присвоенно полю MyArray[k].DataSet, то в любом случае
> там будет тип TOracleDataSet - это же очевидно из определения
> записи
это не простая запись, в ней поля DataSet и Query занимают одни и те же 4 байта в памяти. Поэтому перед использованием такого элемента массива нужно проверять его фактический тип оператором is.
← →
Leonid Troyanovsky © (2010-06-24 18:32) [18]
> nobody (24.06.10 16:38) [16]
> Что и требовалось доказать)
Восторг скоро пройдет, когда выяснится, что весь этот массив ничем
не лучше T(Object)List, а любые содержательные действия с его
элементами представляют собой длинную цепочку if x[i] is Tx.
--
Regards, LVT.
← →
Anatoly Podgoretsky © (2010-06-24 20:55) [19]
> а как на счет VarArrayOf ?
А что с ним не так?
Во первых это Open Array
а во вторых все равно определенного типа array of Variant
← →
anonims (2010-06-25 08:37) [20]TOraObject1 = record ds:TOracleDataset; oqr: TOracleQuery; end;
TOraObject2 = array of TOraObject;
← →
nobody (2010-06-25 11:51) [21]
>
> Восторг скоро пройдет, когда выяснится, что весь этот массив
> ничем
> не лучше T(Object)List, а любые содержательные действия
> с его
> элементами представляют собой длинную цепочку if x[i] is
> Tx.
да, он уже сегодня прошел
пришлось вернуться к одной переменной типа TComponent и спрашивать , какого она типа...
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2010.09.19;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.004 c