Реализация нескольких интерфейсов

Несколько интерфейсов могут содержать одинаковые методы или свойства. При наследовании от таких интерфейсов такие одинаковые методы или свойства сливаются в один:

type
  IShape = interface
    procedure Draw;
    property X: integer read;
    property Y: integer read;
  end;
  IBrush = interface
    procedure Draw;
    property Size: integer read;
  end;
  Brush = class(IShape,IBrush)
    procedure Draw;
    begin
    end;
  end;

Чтобы решить проблему с одинаковыми именами в интерфейсах, в .NET классы могут реализовывать методы интерфейсов так называемым явным образом, так что вызов метода интерфейса для переменной класса возможен только после явного приведения к типу интерфейса. Например:

type
  IWindow = interface
    procedure Menu;
  end;
  IRestaurant = interface
    procedure Menu;
  end;
  RestaurantSystem = class(IWindow,IRestaurant)
    public
    procedure IWindow.Menu; // явная реализация метода интерфейса
    begin
      Println('IWindow.Menu');
    end;
    procedure IRestaurant.Menu;
    begin
      Println('IRestaurant.Menu');
    end;
  end;

begin
  var r := new RestaurantSystem;
  IWindow(r).Menu;
  IRestaurant(r).Menu;
  r.Menu; // ошибка компиляции!
end.