Delphi-Help

  • Increase font size
  • Default font size
  • Decrease font size

Object

Печать
Рейтинг пользователей: / 0
ХудшийЛучший 

Object

Описание

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.

Обращение к имени непосредственно = Brian
Обращение к имени косвенно = Brian

Примечание

Такие типы подпрограмм в действительности яявляются указателями и на код и на части данных метода.

 

Авторизация



Счетчики