Для объектов определены следующие операции: =, <>, 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