Mega Code Archive

 
Categories / Delphi / Compiler Directives
 

Public - starts an externally accessible section of a class

type Class declaration Public Field | Property | Method declaration {...} end; Description The Public directive starts a declaration section of a class definition. In a public section, Fields, Properties and Methods are declared to be accessible to this class, classes descending from it, and code using object instances of the class. In Object Oriented terms, a class object is seen as a black box. The internal operations are not relevant. Public fields, properties and methods are the externally visible part of an object - a controlled access to the internals of the class. Because public acceess provides a linkage of sorts to external code, you should avoid wherever possible making changes to the public section. A Published section is very similar to a Public section, except that it provides some run time information. Notes Warning : avoid making fields public - it is always better to define a property to access them instead. This provides some decoupling from the internals of the class. Related commands Function Defines a subroutine that returns a value Private Starts the section of private data and methods in a class Procedure Defines a subroutine that does not return a value Property Defines controlled access to class fields Protected Starts a section of class private data accesible to sub-classes Published Starts a published externally accessible section of a class Type Defines a new category of variable or process Example code : A sublass that uses a public method to access internal data and methods // Full Unit code. // ----------------------------------------------------------- // You must store this code in a unit called Unit1 with a form // called Form1 that has an OnCreate event called FormCreate. unit Unit1; interface uses Forms, Dialogs, Classes, Controls, StdCtrls, SysUtils; type // Define a base TSquare class : // It has private data that can only be set by a protected method TSquare = class private // Only known to the parent class squareArea : Integer; protected // Known to all classes in the hierarachy squareWidth, squareHeight : Integer; procedure setArea; Public // Known externally by class users property width : Integer read squareWidth; property height : Integer read squareHeight; property area : Integer read squareArea; published // Known externally : has run time info also constructor Create(width, height : Integer); end; // Define a descendant type : // It must use the parent protected method to set the // private area of the square TChangeableSquare = class(TSquare) Public procedure ChangeSize(newWidth, newHeight : Integer); end; // Define the form class used by this unit TForm1 = class(TForm) procedure FormCreate(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} // Include form definitions // Create the TSquare object constructor TSquare.Create(width, height: Integer); begin // Save the width and height in protected fields squareWidth := width; squareHeight := height; // And calculate the square area setArea; end; // Change the TChnageableSquare dimensions procedure TChangeableSquare.ChangeSize(newWidth, newHeight: Integer); begin // Over-write the original width and height values squareWidth := newWidth; squareHeight := newHeight; // And re-calculate the square area setArea; end; // Set the square size from its dimensions procedure TSquare.setArea; begin // Calculate the square area and store privately squareArea := width * height; end; // Main line code procedure TForm1.FormCreate(Sender: TObject); var mySquare : TChangeableSquare; begin // Create a changeable square mySquare := TChangeableSquare.Create(30, 40); // What is the square area now? ShowMessage('Square 30,40 area = '+IntToStr(mySquare.area)); // Change the square dimensions mySquare.ChangeSize(10,20); // What is the square area now? ShowMessage('Square 10,20 area = '+IntToStr(mySquare.area)); end; end. Square 30,40 area = 1200 Square 10,20 area = 200