Цитата(RinOSpro @ 11.12.2008, 15:55 ) | | Это нормально так делать? |
Нормально писать для каждого случая свой код. В том смысле нормально, что чаще всего делают именно так.
Цитата(RinOSpro @ 11.12.2008, 16:10 ) | | У меня не процедуры а функции, и проблема будет вот в чем: обычно я возвращаю Boolean но в одном случае придется string, вот тут то придется думать... |
В этом случае наверное так:
| Код | type TMyDatasetObjFuncBool = function (aDataset:TDataset):Boolean of object; // для методов классов TMyDatasetObjFuncString = function (aDataset:TDataset):string of object; // для методов классов procedure ForEachRecordPerformBool(aDataset:TDataset; aProc:TMyDatasetObjFuncBool); begin aDataset.DisableControls; try aDataset.First; while not aDataset.Eof do begin aProc(aDataset); aDataset.Next; end; finally aDataset.EnableControls; end; end;
procedure ForEachRecordPerformString(aDataset:TDataset; aProc:TMyDatasetObjFuncString ); begin aDataset.DisableControls; try aDataset.First; while not aDataset.Eof do begin aProc(aDataset); aDataset.Next; end; finally aDataset.EnableControls; end; end;
|
Как это лучше сделать в принципе зависит от задачи. Наверное можно вместо двух типов объявить один, с функцией возвращающей variant.
| Код | type TMyDatasetObjFuncVar = function (aDataset:TDataset):variant of object; // для методов классов
|
п.с. Можно конечно объявить функции с одинаковыми названиями и overload-ом. Но в последнее время overloading мне не нравится. |