У меня есть два интерфейса один вытекающих из antoher:Интерфейсы полиморфизма в Delphi
type
ISomeInterface = interface
['{5A46CC3C-353A-495A-BA89-48646C4E5A75}']
end;
ISomeInterfaceChild = interface(ISomeInterface)
['{F64B7E32-B182-4C70-A5B5-72BAA92AAADE}']
end;
Теперь у меня есть процедура, какой параметр является ISomeInterface как:
procedure DoSomething(SomeInterface: ISomeInterface);
Я хочу, чтобы проверить, если SomeInterface является ISomeInterfaceChild. Оператор Is
не поддерживается в интерфейсах в Delphi 7, и я не могу использовать Supports
здесь. Что я могу сделать?
Если все, что требуется, это проверить, поддерживает ли интерфейс 'ISomeInterfaceChild', то вы используете неправильную перегрузку. Вы должны использовать две перегрузки параметров, как я продемонстрировал в своем ответе. –
Ну, я пошел с предположением, что если вам нужно проверить параметр 'ISomeInterfaceChild', вам также нужно работать с ним как' ISomeInterfaceChild'. Othervise проверка не имеет смысла, это не имеет значения, и, таким образом, проверка на это может указывать на проблему с дизайном. – ain
@ain: Не обязательно. Иногда интерфейсы используются для рекламы характеристик об содержащем объекте без фактического раскрытия им новых функций. В этом случае достаточно просто проверить наличие поддерживаемого интерфейса. –