Разное
Облака / Clouds
The bast cloud service
Get 20 GB free!!!
Support WebDav.
Show more >>
time-tested cloud storage
Support WebDav.
Последние книги
Самое популярное
Все бесплатно
Все ссылки на файлы, расположенные на страницах сайта, добавлены пользователями и доступны для бесплатного скачивания. За содержание этих файлов администрация сайта ответственности не несет.
Навигация
Вопросы
Дата изменения файла
Категория: Файловая система
Категория: Файловая система
Как получить размер текстового файла, не открывая его
Категория: Текст и строки
Категория: Текст и строки
Упаковать *.mdb-файл
Категория: Базы данных
Категория: Базы данных
Последний день месяца
Категория: Базы данных
Категория: Базы данных
Удалить или оставить симолы
Категория: Текст и строки
Категория: Текст и строки
Сохранить документ Word как RTF на DELPHI
Категория: Файловая система
Категория: Файловая система
Undo в memo
Категория: Компоненты
Категория: Компоненты
Установить в программу свои шрифты
Категория: Приложение
Категория: Приложение
Узнать установлена ли BDE
Категория: Базы данных
Категория: Базы данных
Находится ли мышь над формой
Категория: Компоненты
Категория: Компоненты
Delphi - Справочник: Object
Object
|
1 type Name = Function header of Object; 2 type Name = Procedure header of Object; |
Ключевое слово (Unit System)
|
Позволяет данным типа подпрограмм обращаться к методу объекта
|
Описание:
|
Ключевое слово 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 |
Примечание:
|
Такие типы подпрограмм в действительности яявляются указателями и на код и на части данных метода. |