Операции с объектами

Для объектов определены следующие операции: =, <>, is, as.

Операции =, <> – это операции отношения для объектов одного класса.

Оператор is

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

Выражение <объект> is <класс> возвращает True, если объектявляется экземпляром данного класса или одного из его наследников, или False в противном случае. Если объект = nil, то результат выражения – False.

Пример:

If Sender is TEdit then

TEdit(Sender).Text:= 'Пример оператора is';

В этом примере, если объект Sender принадлежит классу TEdit, тогда можно использовать свойство объекта Text.

Оператор as

Оператор as выполняет контролируемое преобразование типа объекта к указанному классу.

Выражение <объект> as <класс> возвращаеттот же самый объект, приведенный к указанному классу. Если преобразование невозможно, то формируется ошибка.

Пример:

(Sender as TButton).Caption:= 'Ok'

Копирование объектов одного класса

Если в программе необходимо создать объект, содержание которого является копией другого объекта (оба объекта относятся к одному классу), то необходимо выполнить следующие действия:

§ Создать объекты. Например, МуObject1, МуObject2

§ Копировать данные объекта МуObject1 в объект МуObject2:

МуObject2.Assign(МуObject1);

Для копирования нельзя использовать оператор присваивания, так как в этом случае происходит присваивание указателей!

Например, оператор МуObject2:= МуObject1; присваивается значение указателя МуObject1 указателю МуObject2!

Свойства

Доступ к данным класса должен осуществляться только методами класса. Этот принцип объектно-ориентированной разработки программ, называемый инкапсуляцией, в языке Object Pascal реализован с помощью свойств (property).

Свойства определяют доступ к полям класса через методы класса, делая сами поля недоступными. Для стандартных классов Delphi это выполняется на 100%.

Синтаксис описания свойства:

property <имя свойства> = <тип> read <имя поля или метода чтения>

write <имя поля или метода чтения>

default <значение по умолчанию>

Пример описания свойства SomeColor:

Type

TSomeObject = class(TObject)

function GetColor: TSomeType;

procedure SetColor(NewValue: TSomeType);

property SomeColor: TSomeType read GetColor write SetColor;

end;

В данном примере доступ к значению свойства SomeColor осуществляется через вызовы методов GetColor и SetColor.

Однако в обращении к этим методам в явном виде нет необходимости: достаточно написать, например: AnObject. SomeColor:= SomeValue;

SomeVariable:= AnObject. SomeColor; и компилятор самостоятельно оттранслирует обращение к свойству SomeColor в вызовы методов GetColor или SetColor.

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

Если в описании свойства отсутствует write – значит свойство доступно только для чтения! Аналогично можно сконструировать свойство только для записи.

Пример векторного свойства:

Type

TRectangle = class


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: