Разное
Облака / Clouds
The bast cloud service
Get 20 GB free!!!
Support WebDav.
Show more >>
time-tested cloud storage
Support WebDav.
Последние книги
Самое популярное
Все бесплатно
Все ссылки на файлы, расположенные на страницах сайта, добавлены пользователями и доступны для бесплатного скачивания. За содержание этих файлов администрация сайта ответственности не несет.
Навигация
Вопросы
Получение списка всех сетевых дисков из Delphi
Категория: Интернет и Сети
Категория: Интернет и Сети
Шифрование текста по паролю
Категория: Текст и строки
Категория: Текст и строки
Показать удаленные записи в DBase
Категория: Базы данных
Категория: Базы данных
Автоматическое определения кодировки текста
Категория: Текст и строки
Категория: Текст и строки
Пароль на ADO
Категория: Базы данных
Категория: Базы данных
Упаковка таблиц в BDE
Категория: Базы данных
Категория: Базы данных
Корректное колесико мыши
Категория: Приложение
Категория: Приложение
Вывод текста на канву Canvas
Категория: Компоненты
Категория: Компоненты
Создание ярлыка на Рабочем столе
Категория: Приложение
Категория: Приложение
Установить в программу свои шрифты
Категория: Приложение
Категория: Приложение
Delphi - Справочник: Protected
Protected
|
type Class declaration Protected Field | Property | Method declaration {...} end; |
Деректива (Unit )
|
Начинает раздел класса частных данных доступных подклассам
|
Описание:
|
Директива Protected начинает раздел объявлений определения класса. В защищенном разделе, Поля(Fields), Свойства(Properties) и Методы(Methods) объявлены как доступные для этого класса и классов происходящих от этого. Но внешне не доступных пользователям класса. Это подобно Private директиве, которая скрывает внутреннее выполнение класса, но не скрывает такие данные и методы от подклассов. Вообще, большинство данных и методов, внутренних для класса должны быть определены в разделе Protected. Часто это дает подклассам полезный доступ к ним. Только используйте Private, когда вы уверены, что хотите сохранить материал полностью локальным для текущего класса/модуля. Это может быть верным, когда подкласс хотел бы быть изолированным от родительских сложностей класса. Вы, возможно, захотите сделать защищенные методы виртуальными, чтобы позволить подклассам изменять их, чтобы удовлетворить их потребности. |
Пример кода: Подкласс, который использует защищенный метод обращения к частным данным в родительском классе
|
// Полный код Модуля. // ----------------------------------------------------------- // Вы должны поместить этот код в модуль с именем Unit1 и с формой // названную Form1, которая имеет событие OnCreate названное FormCreate. unit Unit1; interface uses Forms, Dialogs, Classes, Controls, StdCtrls, SysUtils; type // Определение базового класса TSquare : // Он имеет частные данные, которые могут быть только установлены защищенным методом TSquare = class private // Известный только родительскому классу squareArea : Integer; Protected // Известный всем классам в иерархии squareWidth, squareHeight : Integer; procedure setArea; public // Внешне видимый пользователями класса property width : Integer read squareWidth; property height : Integer read squareHeight; property area : Integer read squareArea; published // Внешне видимый: имеет также информацию во время выполнения constructor Create(width, height : Integer); end; // Определение порожденного типа: // Он должен использовать защищенный родительский метод для установки // частной площади квадрата TChangeableSquare = class(TSquare) public procedure ChangeSize(newWidth, newHeight : Integer); end; // Определение класса формы используемой этим модулем TForm1 = class(TForm) procedure FormCreate(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} // Вложение определений формы // Создание объекта TSquare constructor TSquare.Create(width, height: Integer); begin // Сохранение ширины и высоты в защищенных полях squareWidth := width; squareHeight := height; // И вычисление площади квадрата setArea; end; // Изменение измерений TSquare procedure TChangeableSquare.ChangeSize(newWidth, newHeight: Integer); begin // Перезапись первоначальных значений ширины и высоты squareWidth := newWidth; squareHeight := newHeight; // И пересчёт площади квадрата setArea; end; // Установка размера квадрата из его измерений procedure TSquare.setArea; begin // Вычисление площади квадрата и конфиденциальное сохранение squareArea := width * height; end; procedure TForm1.FormCreate(Sender: TObject); var mySquare : TChangeableSquare; begin // Создание изменяемого квадрата mySquare := TChangeableSquare.Create(30, 40); // Какова сейчас площадь квадрата? ShowMessage('Квадрат 30,40 площадь = '+IntToStr(mySquare.area)); // Изменение измерений квадрата mySquare.ChangeSize(10,20); // Какова сейчас площадь квадрата? ShowMessage('Квадрат 10,20 площадь = '+IntToStr(mySquare.area)); end; end.
Результат:
|
Квадрат 30,40 площадь = 1200 Квадрат 10,20 площадь = 200 |