SETCOLCT SRC


{ Потомок TDrawGrid, переопределяющий свойство ColCount

с новыми методами доступа. Это позволяет компоненту-потомку

управлять количеством столбцов. }

{ В секции interface... }

type TMyGrid = class(TDrawGrid) private function GetColCount: LongInt; procedure SetColCount(Value: LongInt);
published property ColCount: LongInt read GetColCount write SetColCount default 0; end; { В секции implementation... } function TMyGrid.GetColCount: LongInt; begin Result := inherited ColCount; end; procedure TMyGrid.SetColCount(Value: LongInt);
begin if Value <= 3 then inherited ColCount := Value; end;

Но, вероятно, самое интересное в переопределяемых свойствах — способ их изменения. Мы не можем непосредственно модифицировать значение private-поля FColCount. Впрочем, прямая модификация привела бы к нежелательным эффектам из-за пропуска ряда необходимых действий, сопровожда ющих изменение числа столбцов. Мы не можем вызвать метод SetColCount предка, потому что он определен в разделе private. А попытка вставить в наш метод SelColCount строку вида

ColCount := Value;

приведет к бесконечной рекурсии и переполнению стека.

Правильный ответ заключается в использовании ключевого слова inherited с именем свойства:

inherited ColCount := Value;

Возможность использования inherited с именем свойства предка не так хорошо документирована, как его применение к унаследованным public- и protected-методам. Для кого-то такая возможность станет приятной неожиданностью, но она вполне в духе Object Pascal.



Содержание раздела