- •Методы объектов
- •Методы класса и данные класса
- •Инкапсуляция
- •Директивы видимости
- •Инкапсуляция при помощи свойств(новое в дельфи)
- •Свойства массивы
- •Многомерные массивы свойств
- •Индексированные свойства
- •Ссылочная модель Дельфи. (см тетрадь) Наследование
- •Наследование и совместимость типов
- •Безопасное преобразование типов
- •Интерфейсы
- •Технические приемы, связанные с реализацией интерфейса.
- •Обработка исключений.
- •Создание пользовательской особой (исключительной ситуации)
- •[]_[] Ссылки на классы []_[]
- •Создание компонентов при помощи ссылок на класс
- •Класс tObject
- •Конструктор Create класса tObject.
- •События.
- •Указатели на методы
- •If sender.InheritsFrom(tButton) then…
- •If sender is tButton then….
Свойства массивы
Предоставляют возможность ссылаться на множество значений свойства, используя одно и то же имя свойства. Каждое указываемое значение в массиве определятся отдельным индексом. Массив свойств объявляется также как и обычные свойства, только с небольшими отличиями.
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.
В свойствах массивах эта директива говорит о свойстве по умолчанию и разрешает опускать имя свойства.!