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.