Могу ли я использовать дженерики для выполнения той же операции с аналогичными типами элементов управления?

Я использую Delphi 2010, и у меня есть модуль, в который на протяжении многих лет я добавил свои собственные процедуры и функции, которые можно использовать с любым проектом, который я делаю, например:

function ListBoxIsSelected(ListBox: TListBox): Boolean;
begin
  Result:= ListBox.ItemIndex <> -1;
end;

В приведенном выше примере в качестве параметра используется TListBox , поэтому всякий раз, когда используется указанная выше функция, я должен предоставить список , который относится к классу TListBox .

Теперь предположим, что у меня есть некоторые другие библиотеки компонентов, которые могут работать с той же функцией, например классы компонентов Jedi.

Как я могу использовать указанную выше функцию, когда список Jedi равен TJvListBox , а моя функция ищет класс TListBox ? Хотя оба компонента практически одинаковы, имена классов разные. Если бы я предоставил ту же функцию специально для TJvListBox , это, вероятно, сработало бы, потому что они оба являются «списками»:

function ListBoxIsSelected(ListBox: TJvListBox): Boolean;
begin
  Result:= ListBox.ItemIndex <> -1;
end;

Теперь, У меня есть целая куча процедур и функций, написанных таким же образом, где мне нужно передать компонент в качестве параметра. Переписывать их снова, чтобы работать с другим классом компонентов, невозможно!

Как я могу написать это с помощью универсальных шаблонов?

7
задан Rob Kennedy 4 May 2011 в 21:29
поделиться