В Delphi 2007 я использую один класс для реализации одного из поддерживаемых интерфейсов второго класса. Это работает. Помощь Delphi гласит:
По умолчанию, используя ключевое слово Implements делегирует весь интерфейс
методы. Тем не менее, вы можете использовать методы разрешения предложений или объявить
методы в вашем классе, которые реализуют некоторые методы интерфейса для
переопределить это поведение по умолчанию.
Однако, когда я объявляю метод во втором классе, у которого есть совпадающая сигнатура одного из методов интерфейса, он не вызывается.
Интересно, это потому, что я получаю доступ к классу через другой интерфейс, когда создаю его.
Ниже приведена тестовая программа, демонстрирующая мою проблему:
program Project1;
{$APPTYPE CONSOLE}
type
IInterface1 = interface
['{15400E71-A39B-4503-BE58-B6D19409CF90}']
procedure AProc;
end;
IInterface2 = interface
['{1E41CDBF-3C80-4E3E-8F27-CB18718E8FA3}']
end;
TDelegate = class(TObject)
protected
procedure AProc;
end;
TMyClass = class(TInterfacedObject, IInterface1, IInterface2)
strict private
FDelegate: TDelegate;
property Delegate: TDelegate read FDelegate implements IInterface1;
public
constructor Create;
destructor Destroy; override;
procedure AProc;
end;
procedure TDelegate.AProc;
begin
writeln('TClassDelegate.AProc');
end;
constructor TMyClass.Create;
begin
inherited;
FDelegate := TDelegate.Create;
end;
destructor TMyClass.Destroy;
begin
FDelegate.Free;
inherited;
end;
procedure TMyClass.AProc;
begin
writeln('TMyClass.AProc');
end;
var
MyObj : IInterface2;
begin
MyObj := TMyClass.Create;
(MyObj as IInterface1).AProc;
end.
Когда я запускаю это, я получаю в качестве вывода:
TClassDelegate.AProc
Что я хочу, это:
TMyClass.AProc
Любая помощь приветствуется.