1 type Name = Function header of Object;
2 type Name = Procedure header of Object;
Ключевое слово Object имеет одно принципиальное использование - чтобы квалифицировать функцию или тип данных процедуры, позволяя ему обратиться к эквивалентному объектному методу.
Устаревшее его использование (не показан в вышестоящем синтаксисе), использовалось, чтобы создать объект (теперь мы используем конструктор класса).
Переменные функции и типы процедуры могут использоваться как указатели к функциям и процедурам с теми же самыми параметрами и конфигурацией возвращаемого значения (сигнатура).
Например:
function AddUp(a, b : Integer) : Integer;
...
type
TFunc = function(a, b : Integer) : Integer;
var
func : TFunc;
c : Integer;
begin
func := AddUp;
c := func(12, 34); // Вызывает функцию AddUp
end;
Со спецификатором Of Object, тип подпрограммы должен быть установлен на указатель метода в объекте.
Например:
type
TMyClass = class
public
procedure StoreName(name : string);
end;
TProc = procedure(name : string) of object;
var
proc : TProc;
myClass : TMyClass;
begin
myClass := TMyClass.Create;
proc := myClass.StoreName;
proc('My name'); // Вызывает myClass.StoreName
end;
|
// Полный код Модуля.
// -----------------------------------------------------------
// Вы должны поместить этот код в модуль с именем Unit1 и с формой
// названную Form1, которая имеет событие OnCreate названное FormCreate.
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs;
type
// Определение простого класса
TSimple = class
private
name : string;
public
function GetName : string;
constructor Create(name : string);
end;
// Сам класс формы
TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
// Создание простого объекта
constructor TSimple.Create(name: string);
begin
// Сохранение переданной строки
self.name := name;
end;
// Возвращение простого имени
function TSimple.GetName: string;
begin
Result := name;
end;
// Главная линия кода
procedure TForm1.FormCreate(Sender: TObject);
type
TNameFunc = Function : string of Object;
var
simple : TSimple;
nameFunc : TNameFunc;
begin
// Созданиеп простого объекта
simple := TSimple.Create('Brian');
// Показ имени объекта
ShowMessage('Обращение к имени непосредственно = '+simple.GetName);
// Теперь обращаемся к этому методу косвенно
nameFunc := simple.GetName;
// Показ имени объекта
ShowMessage('Обращение к имени косвенно = '+nameFunc);
end;
end.
|