|
#1
|
||||
|
||||
Поиск
Народ, подскажите, мне чего то не хватает мозгов.
Есть классы. Например Код:
Tclass1 = class; Tclass1 = class private fFieldA:string; fFieldB:string; Next:Tclass1; public constructor Create(fielda, fieldb: string); end; Tclass1list = class private fFirst:Tclass1; function Search(index:olevariant):TClass1; //функция, которая ищет экземпляр Tclass1 по индексу или по полям fFieldA:string; fFieldB:string public property Cl[index: olevariant]:Tclass1 read Search; default; end; Tclass2 = class; Tclass2 = class private fFieldC:string; Next:Tclass2; public constructor Create(fieldC: string); end; Tclass2list = class private fFirst:Tclass2; function Search(index:olevariant):TClass2; //функция, которая ищет экземпляр Tclass1 по индексу или по полю fFieldC:string; public property Cl[index: olevariant]:Tclass2 read Search; default; end; Таких классов еще несколько. В каждом есть поиск. Работает он одинаково, вычисляет тип переданной переменной index и если она числовая, то выдает экземпляр с нужным индексом, если текстовая, то ищет по нужным текстовым полям. Вопрос, как можно вынести поиск в отдельный класс или обычную функцию, чтобы не описывать для каждого класса функцию поиска? Хотелось бы изобразить в общем виде, типа: Код:
function Search (СтрокаПоискаИлиИндекс: olevariant; СсылкаНаПервыйЭлементfFirst:КакойТипТутУказать; СписокПолейПоКоторымИскать:ВкакомВидеПередатьТожеНеЗнаю):ТипНужногоЭкземпляраКлассаТожеНеЗнаюКакВернуть; Если это возможно осуществить, помогите. |
#2
|
||||
|
||||
У вас и так всё нормально закручено, дело лишь с распознованием типа переменной, возможно примерно так
Код:
function Search (Value: olevariant; fFirst: integer {ещё параметр}): string; begin case TVarData(Value).VType of varSmallInt, varInteger : Result:= IntToStr(Value); varSingle, varDouble, varCurrency : Result:= FloatToStr(Value); varDate : Result:= FormatDateTime('dd/mm/yyyy', Value); varBoolean : if Value then Result:= 'T' else Result:= 'F'; varString : Result:= Value; else Result:= ''; end; end; Я не понял Вашего вопроса, но всё же Вам на него отвечу! |
#3
|
||||
|
||||
Цитата:
Возвращать функция тоже должна экземпляр класса, который соответствует строке поиска. Но какого класса? Функция ведь должна обслуживать несколько похожих классов. |