Описание |
Директива Public начинает раздел объявлений определения класса. В разделе public, Поля(Fields), Свойства(Properties) и Методы(Methods) объявлены как доступные для этого класса и классов, происходящих от этого, и код используют экземпляры класса.
В Объектно-ориентированных терминах, объект класса кажется черным ящиком. Внутренние операции не уместны. Public и published поля, свойства и методы - внешне видимая часть объекта - управляемая доступом к внутренней организации класса.
Поскольку public и published доступ обеспечивает связь видов с внешним кодом, Вы должны избегать везде, где возможно, создание изменений в этих разделах.
Раздел Published очень похож на раздел Public, за исключением того, что он обеспечивает немного информацией во время выполнения.
|
|
Примечания |
Предупреждение: избегайте делания полей публичными - всегда лучше вместо этого определить свойство для обращения к ним. Это обеспечивает некоторое разъединение от внутренней организации класса.
|
|
Похожие команды |
Function Определяет подпрограмму, которая возвращает значение
Private Начинает частный (Private) раздел данных и методов в классе
Procedure Определяет подпрограмму, которая не возвращает значение
Property Определяет управляемый доступ к полям класса
Protected Начинает раздел класса частных данных доступных подклассам
Published Начинается изданный, внешне доступный раздел класса
Type Определяет новую категорию переменной или процесса
| |
|
Пример кода : Подкласс который использует public метод для обращения к внутренним данным и методам |
// Полный код Модуля. // ----------------------------------------------------------- // Вы должны поместить этот код в модуль с именем 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;
// Изменение измерений TChnageableSquare
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
|
|