Sign in Join
Wiki copytemporary

How To Use Interfaces

Copy the text below and it will demonstrate how to use Interfaces to write less code, avoid code repetition,..., this is a fully working program. The default interface in FPC is COM, which makes that once a class with an interface is instantiated as that interface it will automatically be released. Note if you change the interface type to CORBA it WILL leak.

This example has two unrelated classes, but share the same COM interface. Since they are instantiated through that interface, destruction is automatic:

pascal
program interfacesygenerics;
{$mode objfpc}{$H+}
type
  ITestInterface = interface
    ['{3FB19775-F5FA-464C-B10C-D8137D742088}']
    procedure DoSomething;
    procedure DoItAll;
  end;

  TOneObject = class(TInterfacedObject,ITestInterface)
    procedure DoSomething;
    procedure DoItAll;
  end;

  TOtherObject = class(TInterfacedObject,ITestInterface)
    procedure DoSomething;
    procedure DoItAll;
  end;
 
  procedure TOneObject.DoSomething;
  begin
    Writeln('TOneObject DoSomething !');
  end;

  procedure TOneObject.DoItAll;
  begin
    Writeln('TOneObject DoItAll !');
  end;
  
  procedure TOtherObject.DoSomething;
  begin
    Writeln('TOtherObect DoSomething !');
  end;

  procedure TOtherObject.DoItAll;
  begin
    Writeln('TOtherObect DoItAll !');
  end;
  
var
  I: ITestInterface = nil;
begin
  Writeln('Using regular interfaces');
  I := TOneObject.Create as ITestInterface;
  if I <> nil then
    Writeln('Got interface OK. Calling it');
  I.DoSomething;
  I.DoItAll;
  I:=nil;  // releases TOneObject
  I := TOtherObject.Create as ITestInterface;
  if I <> nil then
    Writeln('Got interface OK. Calling it');
  I.DoSomething;
  I.DoItAll;
end.

See also


From the Free Pascal wiki, page "How To Use Interfaces", as it stood on 2021-10-06 after a change by Thaddy, out of the wiki's dump of 2024-05-26. Copyright stays with the author who wrote it, according to the old wiki's Licensing page. If you have concerns about this material, message the admin.

Revision 1, last changed by WikiArchive .

Talk about this page

Nobody has opened a bench for this page yet. Sign in to open one.