Несколько интерфейсов могут содержать одинаковые методы или свойства. При наследовании от таких интерфейсов такие одинаковые методы или свойства сливаются в один:
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.