Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Плещёв ВУМИП 2012-07-06.doc
Скачиваний:
66
Добавлен:
13.05.2015
Размер:
9.35 Mб
Скачать

1.5.5. Свойства

Свойство объявляется в виде:

Property<имя>: <тип> [Read<имя поля или метода чтения>]

[Write<имя поля или метода записи> <директивы запоминания>];

Обычно имена методов чтения или записи начинаются со слов GetилиSetсоответственно, и далее ‑ имя свойства. Обычно используется директива запоминания вида:Default<значение по умолчанию>.

Имя поля обычно начинается с буквы F, а затем указывается имя свойства, значение которого хранится в этом поле.

Примеробъявления класса в модулеUnit1:

UnitUnit1;... //заголовок модуля

Type//раздел объявления типов

MyClass=Class(TObject) //объявление класса MyClass

PrivateFP:Integer; //объявление закрытого поляFPсвойстваP

Protected Procedure SetP(Value: Integer); //процедура записи свойства P

PublishedPropertyP:Integer//объявляется публикуемое свойствоP

ReadFP//свойствоPнепосредственно читается из поляFP

WriteSetPdefault0; //свойствоPизменяется процедуройSetP

End; //окончание объявления классаMyClass...

Implementation//исполняемая часть модуля

ProcedureMyClass.SetP(Value:Integer); //процедура изменения свойстваFP

BeginFP:=Value;End; //значение параметра присваивается полю свойства...

End. //окончание модуля

1.5.6. Методы

Для вызова из потомка одноименного метода ближайшего родитель­ского класса указывается оператор Inherited. Для вызова неод­ноименного родительского метода указываетсяInherited <имя метода>.

Методы могут быть статическими, виртуальными, динамическими и абстрактными. Типы методов также наследуются.

Одноименный статический методв потомке заменяет родитель­ский. При обращении к родительскому классу будет исполь­зоваться его метод, а не метод потомка.

Виртуальные и динамические методыне связаны с другими одноименными методами в классах‑потомках. При вызове метода будет использован метод класса, указанного при вызове. Разница между виртуаль­ными и динамическими методами заключается в максимизации скорости и экономии памяти соответственно.

Примериспользования базового графического классаTSHape:

VarShapes:Array[1..5]OfTShape;//массив новых графических классов ...

For I:=1 To 5 Do Shapes[I].Draw; //вызов метода Draw класса Shapes[I]

При объявлении таких методов после точки с запятой добавляются словаVirtualилиDinamicсоответственно.

Пример: Type TShape=Class Procedure Draw; Virtual; End;

Такие методы из родительского класса могут быть перекрыты в классах‑потомках одноименными методами, если после заголовка метода указать операторOverride.

Пример:

Type TShape=Class Procedure Draw; Virtual; End; //виртуальный метод Draw

TRect=Class(TShape) Procedure Draw; Override; End; //перекрытие Draw

TEllipse=Class(TShape) Procedure Draw; Override; End;//перекрытие Draw

Абстрактныйметод‑ это виртуальный или динамический метод, реализация которого не определена в классе, в котором он объявлен. При объявлении таких методов после словаVirtualилиDinamicсоот­вет­ствен­но добавляется словоAbstract.

Пример: Type TShape=Class Procedure Draw; Virtual; Abstract; End;

Любой метод может быть перегружен с помощью словаOverload (п. 6.2.7), а для виртуальных методов добавляется словоReintroduce.

Пример:

Type T1=Class(TObject) Procedure Out(I:Integer); Overload; Virtual; End;

T2=Class(T1) Procedure Out(I:String); Reintroduce; Overload; End; ...

X:=T2.Create; //создание объекта классаT2

X.Out(‘Иванов’); //вызывается методOutклассаT2

X.Out(1970); //вызывается методOutклассаT1