7.3 Interface implementations

When a class implements an interface, it should implement all methods of the interface. If a method of an interface is not implemented, then the compiler will give an error. For example:

Type  
  IMyInterface = Interface  
    Function MyFunc : Integer;  
    Function MySecondFunc : Integer;  
  end;  
 
  TMyClass = Class(TInterfacedObject,IMyInterface)  
    Function MyFunc : Integer;  
    Function MyOtherFunc : Integer;  
  end;  
 
Function TMyClass.MyFunc : Integer;  
 
begin  
  Result:=23;  
end;  
 
Function TMyClass.MyOtherFunc : Integer;  
 
begin  
  Result:=24;  
end;

will result in a compiler error:

Error: No matching implementation for interface method  
"IMyInterface.MySecondFunc:LongInt" found

Normally, the names of the methods that implement an interface, must equal the names of the methods in the interface definition. The compiler will look for matching methods in all visible methods: the methods of the class, and in parent classes methods with visibility protected or higher.

However, it is possible to provide aliases for methods that make up an interface: that is, the compiler can be told that a method of an interface is implemented by an existing method with a different name. This is done as follows:

Type  
  IMyInterface = Interface  
    Function MyFunc : Integer;  
  end;  
 
  TMyClass = Class(TInterfacedObject,IMyInterface)  
    Function MyOtherFunction : Integer;  
    Function IMyInterface.MyFunc = MyOtherFunction;  
  end;

This declaration tells the compiler that the MyFunc method of the IMyInterface interface is implemented in the MyOtherFunction method of the TMyClass class.