Description |
The Interface keyword is used in two different ways.
Version 1
It starts the definition of external interface of a Unit. Declarations here are externally visible by other units. All of these declarations must be implemented in the Implementation section.
The Uses statement, if present, must be at the start.
Version 2
In Object Oriented programming, we often use Abstract class methods in a base class as a placeholder. All derived classes must implement these methods.
Taking this one step further, an Interface defines a grouping of just abstract properties and methods. It provides a template for a class to use to ensure consistency. It is like a class with only abstract methods. It has the benefits that classes can be based on one parent class, and implement one or more interfaces. It adds a predictable flavour of operation to each class that implements the interface.
Take a look at the Delphi tutorial for more on this complex subject.
|
|
Notes |
When implementing an interface, you must implement QueryInterface, _AddRef and _Release standard interface methods, unless you base your class on one that already has these implemented, such as TInterfacedObject.
|
|
Related commands |
Abstract |
|
Defines a class method only implemented in subclasses |
Class |
|
Starts the declaration of a type of object class |
Constructor |
|
Defines the method used to create an object from a class |
Destructor |
|
Defines the method used to destroy an object |
Function |
|
Defines a subroutine that returns a value |
Implementation |
|
Starts the implementation (code) section of a Unit |
Object |
|
Allows a subroutine data type to refer to an object method |
Procedure |
|
Defines a subroutine that does not return a value |
TObject |
|
The base class type that is ancestor to all other classes |
Unit |
|
Defines the start of a unit file - a Delphi module |
Uses |
|
Declares a list of Units to be imported |
|
|
|
Example code : Creating a car class from a vehicle interface |
// Full Unit code. // ----------------------------------------------------------- // You must store this code in a unit called Unit1 with a form // called Form1 that has an OnCreate event called FormCreate.
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs;
type // An interface definition
IVehicle = Interface(IInterface) // Properties and their functions
function GetAge : Integer;
function GetMiles : Integer;
property age : Integer read GetAge;
property miles : Integer read GetMiles;
// Non-property function
function GetValue : Currency;
end;
// Implement this interface in a car class // Note that TInterfaceObject defines QueryInterface, _AddRef // _AddRef functions for us
TCar = Class(TInterfacedObject, IVehicle)
private
fAge, fMiles : Integer;
fCarType : string;
function GetAge : Integer;
function GetMiles : Integer;
public
property age : Integer read GetAge;
property miles : Integer read GetMiles;
property carType : string read fCarType;
// Non-property function
function GetValue : Currency;
published
constructor Create(age, miles : Integer; carType : string);
end;
// The form class itself
TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
// Car constructor
constructor TCar.Create(age, miles: Integer; carType: string);
begin // Save parameters
fAge := age;
fMiles := miles;
fCarType := carType;
end;
// Get the age of the car
function TCar.GetAge: Integer;
begin
Result := fAge;
end;
// Get the mileage of the car
function TCar.GetMiles: Integer;
begin
Result := fMiles;
end;
// Calculate the car value
function TCar.GetValue: Currency;
begin
Result := 10000.0 - ((age * miles)/10.0);
end;
// Main line code
procedure TForm1.FormCreate(Sender: TObject);
var
car : TCar;
begin // Create a car!
car := TCar.Create(1, 2076, 'Honda Jazz');
// Show the current value of this car
ShowMessageFmt('My %s car is %d years old, %d miles, value %m',
[car.carType, car.age, car.miles, car.GetValue]);
end;
end.
|
My Honda Jazz car is 1 years old, 2076 miles, value ?9,792.40
|
|