Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Lektsii_po_OOP док.doc
Скачиваний:
13
Добавлен:
28.03.2015
Размер:
313.34 Кб
Скачать

Свойства массивы

Предоставляют возможность ссылаться на множество значений свойства, используя одно и то же имя свойства. Каждое указываемое значение в массиве определятся отдельным индексом. Массив свойств объявляется также как и обычные свойства, только с небольшими отличиями.

1. После имени массива свойств необходимо определить список индексных параметров.

Этот список заключается в квадратные скобки и форматируется как список параметров процедуры или функции.(указываются количество и тип индексов, которые будут использоваться свойством.

2. Спецификации методов чтения и записи (если определены) должны ссылаться только на метод доступа.

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

4. На массив свойств нельзя ссылаться как на единое целое.

Пример:

Unit Warray1;

Interface

TvectorClass=class

private

Fvector:array[1..10] of word;

Protected

Function CutVector(Index: integer):word;

Procedure SetVector(Index:Integer; Value:word);

Procedure AddToVectorElem(Index:Integer; Value:word);

Public

Property Elementy[Index:Integer]:word read GetVector write SetVector; default;

Property AddToElements[Index:integer]:word write AddToVectorElem;

End;

Var Form: TForm1;

myVector: TVectorClass;

implementation

function TvectorClass.GetVector;

begin

Result:=GetVector[index];

end;

procedure TVectorClass.SetVector;

begin

Fvector[index]:=value;

end;

procedure TVectorClass.SetToVectorElements;

begin

Fvector[index]:= Fvector[index]*value;

end;

procedure TFrom1.FormCreate(…);

var i:integer; s:string;

begin

myVector:=TVectorClass.Create;

for i:=1 to 10 do

myVector[i]:=I; ////в данном случае присваивается

значение свойства Elements. Т.к.это свойство было объявлено с директивой default (свойство по умолчанию), то имя свойства можно опустить.

2ой вариант использования:

For i:=1 to 10 do

Begin

Form1.Memo1.lines.Add( IntToStr(MyVector.Elements[i]) );

End;

////

For i:=1 to 10 do

MyVector.AddToElements[i]:=5; //т.к. не свойство по умолчанию то обязательно указать имя свойства

end;

myVector.Free;

end;

Директива default в свойствах массивах не является спецификатором хранения как в обычных свойствах.

*Спецификаторы хранения default, stored, nodefault. Они могут быть использованы только для свойств не являющихся составными структурами данных и используются библиотекой VCL для управления автоматическим сохранением значений свойств в файле формы.

Смысл коротко: когда происходит в файле формы состояния компонент, то просматриваются все опубликованные свойства (те которые видно в инсп объектов).

Если такое свойство не имеет спецификатора stored или имеет его, но значение Boolean величины стоящей после него = false, то свойства не сохраняются. Если же результат = true, то текущее значение свойства сравнивается со значением по умолчанию установленным спецификатором default. Если эти значения равны то свойства не сохраняются. Если же не равны или default отсутствует то сохраняются. Спецификатор nodefault имеет чисто декаративный смысл и говорит о отсутствии спецификатора default.

В свойствах массивах эта директива говорит о свойстве по умолчанию и разрешает опускать имя свойства.!

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]