Переопределение свойств

Все компоненты наследуют свойства своих предшественников, причем абстрактные базовые классы обычно объявляют свои свойства преимущественно в секцияхpublic илиprotected. Чтобы такие свойства стали доступными пользователям производных компонент (как на стадии проектирования, так и во время выполнения программы), они обязаны переопределить их с ключевым словом _published.

Как видно из предыдущего примера, свойство MaxLength было определено в секцииprotected базовой компоненты TCustomEdit. Листинг 6.6 содержит переопределение свойства MaxLength как _published в производной компоненте TEdit.

class TEdit: public TCustomEdit { published:

property int MaxLength = { nodefault } ;

// Другие объявления };

Листинг 6.6. Переопределение свойства в производном классе.

Такое переопределение только снимает ограничения свойства, т.е. вы можете переопределитьprotected свойство какpublic, но не можете "спрятать" свойство, объявив его какprotected. При переопределении свойства достаточно указать его имя, однако вы можете изменить значения атрибутов stored и default. Отметим также, что свойство MaxLength теперь вообще не имеет значения по умолчанию, хотя в унаследованном свойстве оно было задано.

Другая принципиальная особенность свойств заключается в том, что их можно изменять во время работы программы с помощью Инспектора объектов.

Правила видимости, объявленные ключевыми словамиprivate, protected и public, действуют на свойства так же как и на обычные члены данных и методы. Единственное отличие объявлений, сделанных в секции _published, от объявлений в секцииpublic, проявляется в том, что во время работы программы Инспектору объектов передается информация RTTI (Run-Time Type Identification) о типах членов данных и свойств.

6.3.4 Типы свойств

Свойство может быть любого типа, который способна возвратить функция (так как реализация свойства может возлагаться на функцию). Разные типы свойств по-разному представлены в окне Инспектора объектов и определяют разные варианты их редактирования, предлагаемые Инспектором. Более того, мы уже знаем, что некоторые свойства имеют собственные редакторы. .

Правилами языка C++ устанавливаются следующие обобщенные группы типов компонентных свойств: