Студопедия

КАТЕГОРИИ:

АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция

Методы объектов и оператор with




Конструктор и деструктор вкупе с методом Free - далеко не единственные стандартные методы, достающиеся создаваемым классам в наследство от TObject. Рассмотрим здесь некоторые из них, которые могут быть полезными при работе с объектами в Delphi.

Начнем с того, что для конструктора и деструктора предусмотрены два дополнительных метода, которые вызываются автоматически сразу после создания объекта и непосредственно перед уничтожением. Это AfterConstruction и BeforeDestruction. Хотя к самим этим методам обращаться напрямую нельзя - они вызываются автоматически, допускается определить в них код, который следует выполнить после создания объекта, или перед его удалением.

Если в коде программы требуется выяснить, к какому классу принадлежит тот или иной объект, можно использовать метод ClassName, возвращающий имя класса в виде строки. А если требуется просто проверить, не является ли имя класса у объекта каким-либо конкретным значением, используют метод ClassNameIs:

str := User.ClassName; // в str получим имя класса, например, 'TUser'

ifUser.ClassNameIs('TUser') then ...

 // условие будет верно, если объект User является экземпляром класса TUser

Для того же случая, если требуется получить ссылку именно на сам класс, а не его имя, предусмотрен метод ClassType. Однако напрямую его использовать не следует - для этих целей существует оператор is, который применим не только к простым типам, но и к классам:

ifUserisTUserthen ...

 // условие будет верно, если объект User является экземпляром класса TUser

Собственно говоря, другой оператор этой группы - as - так же применим к объектам. Например, если мы хотим использовать переменную User2, являющуюся экземпляром некого класса TCustomUser, в качестве объекта типа TUser, мы можем написать такое выражение:

(User2 as TUser).Login := 'ИванИваныч';

 (User2 as TUser).Password := 'пароль';

Такое выражение будет допустимо, если у того класса, которому принадлежит объект User2 (т.е. TCustomUser), так же имеются свойства Login и Password, причем они должны быть такого же типа, как и у TUser.

Рассмотренные методы иногда бывают полезными при работе с объектами, поскольку позволяют выполнить те или иные операции. А вот оператор with полезен скорее программисту, пишущему программу, поскольку в ряде случаев позволяет существенно сократить размер кода. Например, предыдущие выражения при помощи оператора with можно записать так:

With (User2 as TUser) do begin

Login := 'ИванИваныч';

Password := 'пароль';

end;

Фактически, при помощи оператора with мы можем, единожды указав часть выражения до точки, далее его опускать до тех пор, пока не окончится блок with. При этом не важно, сколько уровней вложения будет использовано. Например, если взять класс TUser, который в качестве поля MegaInfo имеет класс TMegaUserInfo, а оно, в свою очередь, имеет поле Address, являющееся записью типа TAddress, то для обращения к полям записи всякий раз придется указывать довольно-таки длинные строки, определяющие расположение того или иного фрагмента данных:

User.MegaInfo.Address.PostIndex := '119071';

User.MegaInfo.Address.City := 'Москва';

Вместо этого, с использованием оператора with, можно лишь единожды написать весь "путь" к этим данным, в дальнейшем обращаясь лишь к самим полям:

With User.MegaInfo.Address do begin

PostIndex := 119071;

...

end;

В операторе with допустимо использовать сразу несколько таких путей. Например, если надо будет обращаться и к полям записи Address, и непосредственно к полям User, то можно использовать такой синтаксис:

With User, User.MegaInfo.Address do begin

PostIndex := 119071;

Login := 'ИванИваныч';

MegaInfo.Phone := '123-4567';

 ...

end;

Здесь в первой строке будет использован второй путь - до полей Address, а во второй и третьей - первый, до полей объекта User. Попутно отметим, что оператор with может использоваться не только с классами, но и с обычными записями










Последнее изменение этой страницы: 2018-06-01; просмотров: 170.

stydopedya.ru не претендует на авторское право материалов, которые вылажены, но предоставляет бесплатный доступ к ним. В случае нарушения авторского права или персональных данных напишите сюда...