Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
C++Builder.doc
Скачиваний:
7
Добавлен:
01.04.2025
Размер:
15.66 Mб
Скачать

6.3.2.2 Свойства обеспечивают доступ к членам данных

Существует два способа, посредством которых свойства обеспечивают доступ к внутренним членам данных компонент: прямой или косвенный посредством методов чтения/записи.

class _declspec(delphiclass) TCustomEdit;

class _declspec(pascalimplementation) TCustomEdit :

public Controls::TWinControl { private:

int FMaxLength;

void _fastcall SetMaxLength(int Valued-protected:

property int MaxLength = { read=FMaxLength, write=SetMaxLength, default=false };

};

Листинг 6.4. Способы доступа свойства к членам данных.

Листинг 6.4 содержит код объявления компоненты TCustomEdit, взятый из VCL. TCustomEdit — это базовый класс для таких компонент редактирования как, TEdit и TMemo.

TCustomEdit имеет внутренний член данных FMaxLength типа int, который определяет максимальное значение длины символьной строки, которую пользователь может ввести в данный элемент управления. Вместо прямого присваивания FMaxLength этого значения, выполняется присваивание свойству MaxLength, которое обеспечивает доступ к члену FMaxLength.

Определение свойства MaxLength содержит тип, имя свойства и объявления атрибутов: прямого чтения члена данных FMaxLength, косвенного присваивания свойству MaxLength посредством метода записи SetMaxLength и значения по умолчанию 0.

6.3.2.3 Методы записи и чтения свойств

Метод записи имеет единственный параметр того же типа, что и свойство, и не возвращает значения. По соглашению, название функции образуется из слова "Set", за которым следует имя свойства. Например, метод записи свойства MaxLength имеет имя SetMaxLength и тип void. Метод записи свойства присвоит значение своего параметра соответствующему члену данных. Одна из причин использования метода записи — вызвать побочный эффект как результат операции присваивания свойству.

Листинг 6.5 представляет пример реализации ранее объявленного метода записи SetMaxLength.

void TCustomEdit::SetMaxLength(int Value) {

if (FMaxLength i= Value) {

FMaxLength = Value;

if (HandleAllocated) SendMessagefHandle, EM_LIMITTEXT, Value, 0);

} }

Листинг 6.5. Пример реализации метода записи.

Метод SetMaxLength проверяет, не присваивается ли свойству то значение, которое уже в нем хранится. Если нет, то новое значение присваивается члену данных FMaxLength. Кроме того, метод выдает сообщение EM_LIMITTEXT Windows в то окно, которое инкапсулирует компонента TCustomEdit. По этому сообщению устанавливается верхний предел длины текста, который пользователь может ввести в данный элемент управления. Последнее действие представляет собой простейший вариант побочного эффекта, вызываемого методом записи свойства.

Метод чтения представляет собой функцию без параметров (или с параметрами индексов для свойства типа массив), которая возвращает типизированное значение свойства. По соглашению, название функции образуется из слова "Get", за которым следует имя свойства. Например, метод чтения свойства MaxLength имеет имя GetMaxLength и возвращает значение типа int.

Метод чтения может осуществлять преобразование типа члена данных. Такие операции производят, например, методы AsString, AsFloat и Aslnteger, реализованные в компоненте TField.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]