2009-09-07 4 views
2

Если у меня есть объект, который реализует интерфейс, он автоматически сопоставляет методы интерфейса методам класса с тем же именем и сигнатурой по умолчанию. Есть ли способ переопределить это и сопоставить метод интерфейса с методом с той же подписью, но с другим именем? (Это может быть полезно, например, если я реализую два интерфейса, оба из которых имеют метод с тем же именем и подписью, и я хочу иметь возможность делать с ними разные вещи.)Как сопоставить имена интерфейсов с именами разных методов?

ответ

7

Это действительно возможно , Эта техника называется Method Resolution Clause.

+0

Спасибо! Я знал, что где-то видел что-то подобное, но я не мог вспомнить, как это было сделано. –

8

Это пример кода ответа Эрвина

type 
    ISomeInterface = interface 
    procedure SomeMethod; 
    end; 

    IOtherInterface = interface 
    procedure SomeMethod; 
    end; 

    TSomeClass = class(TInterfacedObject, ISomeInterface, IOtherInterface) 
    public 
    procedure ISomeInterface.SomeMethod = SomeInterfaceSomeMethod;  
    procedure IOtherInterface.SomeMethod = OtherInterfaceSomeMethod;  

    procedure SomeMethod;    // TSomeClass.SomeMethod 
    procedure SomeInterfaceSomeMethod; // ISomeInterface.SomeMethod 
    procedure OtherInterfaceSomeMethod; // IOtherInterface.SomeMethod 
    end; 
Смежные вопросы