1. Unit Name;
Interface
Declarations...
Implementation
Declarations... end.
2. type Name = Interface{(BaseInterface,...)};
Ключевое слово Interface используется двумя различными способами.
Версия 1:
Он начинает определение внешнего интерфейса модуля. Здешние объявления внешне видимы другими модулями. Все эти объявления должны быть осуществлены в разделе Implementation.
Раздел Uses, если он имеется, должен быть в начале.
Версия 2:
В Объектно-ориентированном программировании, мы часто используем методы Абстрактного класса (Abstract) в базовом классе как метка - заполнитель. Все полученные классы должны использовать эти методы. Беря этот шаг в дальнейшем, определения интерфейса группируются только по абстрактным свойствам и методам. Это обеспечивает шаблон для класса, для того чтобы использовать его в гарантированной совместимости. Это походит классу только с абстрактными методами. Это выгодно тем классам, которые основаны на одном родительском классе и использующим один или более интерфейсов. Это добавляет предсказуемости операции для каждого класса, который использует интерфейс.
Для получения большей информации по этой сложной теме смотрите справку Delphi.
|
// Полный код Модуля.
// -----------------------------------------------------------
// Вы должны поместить этот код в модуль с именем Unit1 и с формой
// названную Form1, которая имеет событие OnCreate названное FormCreate.
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs;
type
// Определение интерфейса
IVehicle = Interface(IInterface)
// Свойства и их функции
function GetAge : Integer;
function GetMiles : Integer;
property age : Integer read GetAge;
property miles : Integer read GetMiles;
// Функция без свойств
function GetValue : Currency;
end;
// Выполнение этого интерфейса в классе car
// Обратите внимание, что TInterfaceObject определяет для нас
// QueryInterface, _AddRef, _Release функции
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;
// Функции без свойств
function GetValue : Currency;
published
constructor Create(age, miles : Integer; carType : string);
end;
// Сам класс формы
TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
// Конструктор Car
constructor TCar.Create(age, miles: Integer; carType: string);
begin
// Сохраняем параметры
fAge := age;
fMiles := miles;
fCarType := carType;
end;
// Получение возраста автомобиля
function TCar.GetAge: Integer;
begin
Result := fAge;
end;
// Получение пробега автомобиля
function TCar.GetMiles: Integer;
begin
Result := fMiles;
end;
// Вычисление цены автомобиля
function TCar.GetValue: Currency;
begin
Result := 10000.0 - ((age * miles)/10.0);
end;
// Основная линия кода
procedure TForm1.FormCreate(Sender: TObject);
var
car : TCar;
begin
// Создание car!
car := TCar.Create(1, 2076, 'Honda Jazz');
// Показ текущей цены этой машины
ShowMessageFmt('Мой автомобиль %s, возраст %d г, пробег %d миль, цена %m',
[car.carType, car.age, car.miles, car.GetValue]);
end;
end.
|
Мой автомобиль Honda Jazz, возраст 1 г, пробег 2076 миль, цена $9,792.40
|
При выполнении интерфейса, если вы не базируете ваш класс на том, которым уже осуществили их, типа TInterfacedObject, вы должны выполнить стандартные методы интерфейса QueryInterface, _AddRef и _Release.
|