домашняя библиотека
Поиск в библиотеке
Навигация по предметам
Последние добавленные новости
Реклама

Объектно-Ориентированное программированиеЛекции по Объектно-Ориентированному программированию

В этом примере вне объекта значение свойства можно лишь прочитать; попытка присвоить свойству AProperty значение вызовет ошибку компиляции.

Для присвоения свойству значения по умолчанию используется ключевое слово default:

Property Visible: boolean read FVisible write SetVisible default True;

Но это не означает, что при создании объекта свойство будет установлено. Применение значений свойств по умолчанию будет рассмотрено позднее. Свойство может быть и векторным. В этом случае оно выглядит как массив:

property APoints [ Index : Integer ] :TPoint read GetPoint write SetPoint;

property Pixels [X, Y: Integer]: TColor read GetPixel write SetPixel;

property Values [const Name: string]: string read GetValue write SetValue;

На самом деле в классе может и не быть соответствующего поля - массива. Вся обработка обращений к внутренним структурам класса может быть замаскирована.

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

После ключевых слов read и write в этом случае должны стоять имена методов - использование значений полей массивов недопустимо. Метод, читающий значение векторного свойства, должен быть описан как функция, возвращающая значение того же типа, что и элементы свойства, и имеющая параметры, соответствующие индексам свойства:

function GetPoint (Index -Integer) :TPoint;

function GetFixel (X, Y: Integer): TColor;

function GetValue (const Name: string): string;

Аналогично, метод, помещающий значения в такое свойство, должен первыми параметрами иметь индексы, а далее - переменную нужного типа (которая может передаваться как по ссылке, так и по значению):

procedure SetPoint (Index: integer; NewPoint :TPoint) ;

procedure SetPixel(X, Y: Integer; Value: TColor);

procedure SetValue (const Name, Value: string);

Доступ к векторным свойствам осуществляется с помощью индексов. Например:

if Collection. Points[0] = constPoint then Exit;

Canvas. Pixels[10, 20] := clRed;

Params. Values ['PATH'] := 'C:DELPHIBIN';

Или путем вызова методов:

if Collection .GetPoint (0) = constPoint then Exit;

Canvas. SetPixel (10, 20, clRed) ;

Params. SetValuef (‘PATH’, 'C:DELPHIBIN') ;

Рассмотрим пример - векторное свойство, предназначенное для хранения оценки студента за экзамен. Фамилия студента будет индексом, оценка - значением векторного свойства. Для хранения фамилий и оценок предлагается использовать массивы, хотя возможны и другие варианты.

Лекции по Объектно-Ориентированному программированию

   
 
  • Добавлен: 7-06-2011, 23:13 | Просмотров: 33035

    support: admin@sdb.su