Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Можно ли перекрывать методы у интерфейса ?


Автор: Gershkovich 7.5.2009, 18:12
Привет всем!
Можно ли использовать перекрытие методов в интерфейсах?

Например:
Код

  IBaseInterface = interface
    function GetObject : TObject;
  end;


  IExtInterface = interface(IBaseInterface)
    function GetObject : TButton;
  end;


  TMyObject = class(TInterfacedObject, IExtInterface)
  public
    function GetObject : TButton;
    ...
  end;


Такая вот  конструкция не компилится.
Ругается Declaration of 'GetObject' differs from declaration in interface 'IExtInterface'.
Хотя казалось бы что TButton наследник TObject и я ожидал
что сработает. Но увы...

Если б речь шла о классах, то методы можно было б перекрывать.
А можно ли так делать в интерфейсах ?

Заранее спасибо.

Автор: CodeMonkey 7.5.2009, 19:42
Код
  IBaseInterface = interface
    function GetObject : TObject;
  end;

  IExtInterface = interface
    function GetObject : TButton;
  end;

  TMyObject = class(TInterfacedObject, IBaseInterface, IExtInterface)
  protected
    function IBaseInterface_GetObject : TObject;
    function IExtInterface_GetObject : TButton;
    function IBaseInterface.GetObject = IBaseInterface_GetObject;
    function IExtInterface.GetObject = IExtInterface_GetObject;
    ...
  end;

Автор: Gershkovich 8.5.2009, 10:16
CodeMonkey, спасибо.
Про такой финт я не знал.

Но, как я понял, это все же финт.
Наследовать интерфейсы все же нельзя.
А жаль.

Автор: CodeMonkey 8.5.2009, 13:52
Наследовать-то можно, но для того, что вам нужно, вам не нужно наследование интерфейсов - вам нужно два раздельных интерфейса.

Ну или так:
Цитата
  IBaseInterface = interface
    function GetObject : TObject;
  end;

  IExtInterface = interface(IBaseInterface)
    function GetButton : TButton;
  end;


Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)