Облака / Clouds
    Go to Copy.com
    Copy.com
    The bast cloud service
    Get 20 GB free!!!
    Support WebDav.
    Show more >>

    Go to Dropbox.com
    Dropbox.com
    time-tested cloud storage
    Support WebDav.
Все бесплатно
    Все ссылки на файлы, расположенные на страницах сайта, добавлены пользователями и доступны для бесплатного скачивания. За содержание этих файлов администрация сайта ответственности не несет.



Вопросы
  Получение списка всех сетевых дисков из Delphi
   Категория: Интернет и Сети
  Шифрование текста по паролю
   Категория: Текст и строки
  Показать удаленные записи в DBase
   Категория: Базы данных
  Автоматическое определения кодировки текста
   Категория: Текст и строки
  Пароль на ADO
   Категория: Базы данных
  Упаковка таблиц в BDE
   Категория: Базы данных
  Корректное колесико мыши
   Категория: Приложение
  Вывод текста на канву Canvas
   Категория: Компоненты
  Создание ярлыка на Рабочем столе
   Категория: Приложение
  Установить в программу свои шрифты
   Категория: Приложение

Delphi - Справочник: Protected

ABCDEFGHIJKLMNOPQRSTUVWXYZ

  << Вернуться  

 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

  << Вернуться