| 
| Description |  | The Constructor keyword defines a constructor procedure Name for a class. 
 When creating an object, you call a Constructor method of the class, not the object:
 
 objectName := ClassName.Create(parms);
 
 The Name for the constructor is normally Create, but is not restricted to this. It is very wise to keep to this name.
 
 An object may be constructed with or without arguments (see the example).
 
 Constructors may be defined in the public or published sections of the class definition.
 
 You may have multiple constructors, but by doing so, you can only define one of these as Published. With multiple constructors, each must be suffixed with the Overload directive, as required by delphi.
 
 When implementing the constructor procedure, normally called Create, you should make it a habit of calling the parent constructor, for example
 
 constructor Create;
 inherited;
 ...
 
 This ensures that the resulting object is a safe instantiated instance of this parent class, even if the parent is TObject, which does nothing in its constructor. The sample code illustrates this plain variety of Inherited plus the version where the parent constructor has arguments.
 |  |  |  | Related commands |  | 
| Class |  | Starts the declaration of a type of object class |  
| Destructor |  | Defines the method used to destroy an object |  
| Function |  | Defines a subroutine that returns a value |  
| Inherited |  | Used to call the parent class constructor or destructor method |  
| Object |  | Allows a subroutine data type to refer to an object method |  
| Procedure |  | Defines a subroutine that does not return a value |  
| TObject |  | The base class type that is ancestor to all other classes |  |  |  | 
| Example code : Examples of constructors with and without arguments |  | // 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;
 
 type
 // Define a parent class, base on TObject by default
 TFruit = class
 public
 name   : string;
 Constructor Create; overload;   // This constructor uses defaults
 Constructor Create(name : string); overload;
 end;
 
 // Define a descendant types
 TApple = class(TFruit)
 public
 diameter : Integer;
 published
 Constructor Create(name : string; diameter : Integer);
 end;
 
 // The class for the form used by this unit
 TForm1 = class(TForm)
 procedure FormCreate(Sender: TObject);
 end;
 
 var
 Form1: TForm1;
 
 implementation
 {$R *.dfm} // Include form definitions
 
 // Create a fruit object - parameterless version
 constructor TFruit.Create;
 begin
 // Execute the parent (TObject) constructor first
 inherited;  // Call the parent Create method
 
 // Now set a default fruit name
 self.name := 'Fruit';
 end;
 
 // Create a fruit object - parameterised version
 constructor TFruit.Create(name: string);
 begin
 // Cannot execute the parent constructor - parms differ
 
 // And save the fruit name
 self.name := name;
 end;
 
 // Create an apple object
 constructor TApple.Create(name: string; diameter : Integer);
 begin
 // Execute the parent (TFruit) constructor first
 inherited Create(name);  // Call the parent method
 
 // Now save the passed apple diameter
 self.diameter := diameter;
 end;
 
 // Main line code
 procedure TForm1.FormCreate(Sender: TObject);
 var
 fruit  : TFruit;
 banana : TFruit;
 apple  : TApple;
 
 begin
 // Create 3 different fruit objects
 fruit  := TFruit.Create;
 banana := TFruit.Create('Banana');
 apple  := TApple.Create('Pink Lady', 12);
 
 // See which of our objects are fruits
 if fruit  Is TFruit then ShowMessage(fruit.name  +' is a fruit');
 if banana Is TFruit then ShowMessage(banana.name +' is a fruit');
 if apple  Is TFruit then ShowMessage(apple.name  +' is a fruit');
 
 // See which objects are apples
 if fruit  Is TApple then ShowMessage(fruit.name   +' is an apple');
 if banana Is TApple then ShowMessage(banana.name  +' is an apple');
 if apple  Is TApple then ShowMessage(apple.name   +' is an apple');
 end;
 end.
 
 |  
 | Fruit is a fruit Banana is a fruit
 Pink Lady is a fruit
 Pink Lady is an apple
 
 |  |