Delphi справочник - Форум программистов - Навигация  
 A  B  C  D  E  F  G  H  I  J  K  L  M  N  O  P  Q  R  S  T  U  V  W  X  Y  Z      По первой букве  
System     SysUtils     StrUtils     DateUtils     FileCtrl     ConvUtils     StdConvs     Math     Classes     Dialogs     Types     Variants    ПО Unit   Compiler directives     Directives     Keywords     Types     Variables     Constants     Functions     Procedures    По категории  

форум программистов

Основы Delphi
Object
Ключевое слово
Позволяет данным типа подпрограмм обращаться к методу объекта System unit
  
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;
Примечания
Такие типы подпрограмм в действительности яявляются указателями и на код и на части данных метода.
Похожие команды
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
 


Оплата за обучение в Kata Academy только после твоего трудоустройства в IT, начни карьеру Middle Java-разработчика



Интенсив по Python: Работа с API и фреймворками 24-26 ИЮНЯ 2022. Знаете Python, но хотите расширить свои навыки? Slurm подготовили для вас особенный продукт!





форум программистов


© Форум Delphi  |  Форум Pascal   |  Блог программистов   |  Исходники Delphi   |  Автор сайта  |  Ссылки   |  Английская версия