Delphi-Help

Public

Печать
Рейтинг пользователей: / 0
ХудшийЛучший 

Public

Описание

type Class declaration
Public
Field | Property | Method declaration
{...}
end;

Директива Public начинает раздел объявлений определения класса. В разделе public, Поля(Fields), Свойства(Properties) и Методы(Methods) объявлены как доступные для этого класса и классов, происходящих от этого, и код используют экземпляры класса. В Объектно-ориентированных терминах, объект класса кажется черным ящиком. Внутренние операции не уместны. Public и published поля, свойства и методы - внешне видимая часть объекта - управляемая доступом к внутренней организации класса.

Поскольку public и published доступ обеспечивает связь видов с внешним кодом, Вы должны избегать везде, где возможно, создание изменений в этих разделах.

Раздел Published очень похож на раздел 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

Примечание

Предупреждение: избегайте делания полей публичными - всегда лучше вместо этого определить свойство для обращения к ним. Это обеспечивает некоторое разъединение от внутренней организации класса.

 

Авторизация



Счетчики