Чтение онлайн

на главную - закладки

Жанры

Технологии программирования

Костерин В В

Шрифт:

procedure SetValue1(Sender: TObject;

var Avalue: Integer);

procedure SetValue2(Sender: TObject;

var Avalue: Integer);

end;

var

Obj1: T1stObject;

Obj2: T2ndObject;

begin

Obj1:= T1stObject.Create;

Obj2:= T2ndtObject.Create;

Obj1.OnMyEvent:= Obj2.SetValue1;

Obj2.OnMyEvent:= Obj2.SetValue2;

end;

Как

в этом примере, так и повсюду в Delphi за свойствами-событиями стоят поля, являющиеся указателями на метод. Таким образом, при делегировании можно присваивать методы других классов. Здесь обработчиком события OnMyEvent объекта Obj1 по очереди выступают методы SetValue1 и SetValue2 объекта Obj2.

10. ФУНКЦИИ КЛАССА

В Object Pascal имеется возможность определения полей процедурного типа. Очевидно, что в теле функций, привязываемых к этим полям, разработчику необходим доступ к другим полям объекта, методам и т. п. Возможность такого доступа базируется на передаче в эти функции неявного, но доступного в их коде параметра, автоматически принимающего значение поля объекта Self. Такие функции называются функциями классов. Для объявления функций классов необходимо использовать специальную конструкцию function of object.

11. ПРИВЕДЕНИЕ ТИПОВ

На операции с переменной определенного типа компилятор обычно налагает ограничения, разрешая выполнение только тех операций, которые характерны для указанного типа данных. Иногда компилятор осуществляет автоматическое приведение типа, например, при присвоении целого значения действительной переменной.

В языке Pascal имеется механизм явного приведения типов.

В операции is определяется, принадлежит ли данный объект указанному типу или одному из его потомков.

Выражение, представленное в следующем примере, возвращает True, если переменная AnObject ссылается на образец объектного типа TMyClass или одного из его потомков.

AnObject is TmyClass

Сама по себе операция is не является операцией задания типа. В ней лишь проверяется совместимость объектных типов. Для корректного приведения типа объекта применяется операция as:

With AnObject as TmyClass do

Возможен и такой способ приведения типа без явного указания as.

With TMyClass(AnObject)do

В

программах перед операцией as проверяют совместимость типов с помощью операции is. Если типы несовместимы, запускается обработчик исключительной ситуации EinvalidCast.

Таким образом, в конструкции as операция явного приведения типа оказывается заключенной в безопасную оболочку:

If AnObject is TobjectType then

with TobjectType(AnObject) do

else

raise EinvalidCast.Create('Неправильное приведение типа');

12. ОБЪЕКТНАЯ ССЫЛКА

Delphi позволяет создать специальный описатель объектного типа (именно на тип, а не на экземпляр!), известный как object reference — объектная ссылка.

Объектные ссылки используются в следующих случаях:

— тип создаваемого объекта не известен на этапе компиляции;

— необходим вызов метода класса, чей тип не известен на этапе компиляции;

— в качестве правого операнда в операциях проверки и приведения типов с использованием is и as.

Объектная ссылка определяется с использованием конструкции class of… Приведем пример объявления и использования class reference:

type

TMyObject = class (TObject)

MyField: TMyObject;

constructor Create;

end;

TObjectRef = class of TObject;

var

ObjectRef: TObjectRef;

s: string;

begin

ObjectRef:=TMyObject; {присваиваем тип, а не экземпляр!}

s:=ObjectRef.ClassName; {строка s содержит 'TMyObject'}

end;

Таким образом, в Delphi определена специальная ссылка TClass, совместимая по присваиванию с любым наследником TObject. Аналогично объявлены классы: TPersistentClass и ТСотроnentClass.

13. СТРУКТУРНАЯ ОБРАБОТКА ИСКЛЮЧИТЕЛЬНЫХ СИТУАЦИЙ

Под исключительной ситуацией (raise) здесь понимается ситуация, которая не позволяет без особых дополнительных мер продолжить выполнение программы, например деления на ноль, переполнения разрядной сетки, извлечения квадратного корня из отрицательного числа и т. д.

Поделиться:
Популярные книги

Наследие Маозари 3

Панежин Евгений
3. Наследие Маозари
Фантастика:
рпг
аниме
5.00
рейтинг книги
Наследие Маозари 3

Совок 13

Агарев Вадим
13. Совок
Фантастика:
попаданцы
5.00
рейтинг книги
Совок 13

Госпожа Доктор

Каплунова Александра
Фантастика:
попаданцы
фэнтези
5.00
рейтинг книги
Госпожа Доктор

Королева Солнца. Предтечи. Повелитель зверей. Кн. 1-17

Нортон Андрэ
Королева Солнца
Фантастика:
фэнтези
6.25
рейтинг книги
Королева Солнца. Предтечи. Повелитель зверей. Кн. 1-17

Кодекс Крови. Книга II

Борзых М.
2. РОС: Кодекс Крови
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Кодекс Крови. Книга II

Хозяйка старой усадьбы

Скор Элен
Любовные романы:
любовно-фантастические романы
8.07
рейтинг книги
Хозяйка старой усадьбы

Вспомнить всё (сборник)

Дик Филип Киндред
Фантастика:
научная фантастика
6.00
рейтинг книги
Вспомнить всё (сборник)

Ученик

Первухин Андрей Евгеньевич
1. Ученик
Фантастика:
фэнтези
6.20
рейтинг книги
Ученик

Жена неверного ректора Полицейской академии

Удалова Юлия
Любовные романы:
любовно-фантастические романы
4.25
рейтинг книги
Жена неверного ректора Полицейской академии

Купец III ранга

Вяч Павел
3. Купец
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Купец III ранга

Мастер Разума III

Кронос Александр
3. Мастер Разума
Фантастика:
героическая фантастика
попаданцы
аниме
5.25
рейтинг книги
Мастер Разума III

На границе империй. Том 8. Часть 2

INDIGO
13. Фортуна дама переменчивая
Фантастика:
космическая фантастика
попаданцы
5.00
рейтинг книги
На границе империй. Том 8. Часть 2

Сколько стоит любовь

Завгородняя Анна Александровна
Любовные романы:
любовно-фантастические романы
6.22
рейтинг книги
Сколько стоит любовь

Идеальный мир для Лекаря 16

Сапфир Олег
16. Лекарь
Фантастика:
боевая фантастика
юмористическая фантастика
аниме
5.00
рейтинг книги
Идеальный мир для Лекаря 16