| Описание |  
Ключевое слово 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;
 |  
 |  
| Примечания |  
| 
Такие типы подпрограмм в действительности яявляются указателями и на код и на части данных метода.
 |  
 |  
| Похожие команды |  
Class  Начинает объявление типа объектного класса
  
Function  Определяет подпрограмму, которая возвращает значение
  
Procedure  Определяет подпрограмму, которая не возвращает значение
  
TObject  Тип базового класса, который является предком для всех других классов
  
 
  |    | 
  | 
| Пример кода : Доступ к объектному методу непосредственно и косвенно |  
// Полный код Модуля. // ----------------------------------------------------------- // Вы должны поместить этот код в модуль с именем 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. 
 |  
Обращение к имени непосредственно = Brian 
Обращение к имени косвенно = Brian 
 |  
  |