SmartPascal
Is
Keyword
Tests whether an object is a certain class or ascendant
  Object reference Is Class reference
Description
The Is keyword is used to test to see whether an object belongs to a class, or parent of that class.
 
For example, you may test to see whether a graphical component (normally called 'Sender') is a TButton, or TList or whatever.
 
All objects belong to the TObject class, from which they are ultimately derived.
Related commands
As Used for casting object references
Class Starts the declaration of a type of object class
Object Allows a subroutine data type to refer to an object method
TObject The base class type that is ancestor to all other classes
 
Example code : Illustrate use of is on a class hierarchy
// 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 new class types
  TFruit = class
  public
    name : string;
  published
    constructor Create(name : string);
  end;
  // Define two descendant types
  TApple = class(TFruit);
  TPear  = class(TFruit);
  TForm1 = class(TForm)
    procedure FormCreate(Sender: TObject);
  end;

var
  Form1: TForm1;

implementation
{$R *.dfm} // Include form definitions

// Create a fruit object
constructor TFruit.Create(name: string);
begin
  self.name := name;
end;

procedure TForm1.FormCreate(Sender: TObject);
var
  fruit  : TFruit;
  apple  : TApple;
  pear   : TPear;
begin
  // Create 2 different fruit objects
  apple  := TApple.Create('Pink Lady');
  pear   := TPear.Create('Comice');

  // They are both TFruit or descendant types
  if apple  Is TFruit then ShowMessage(apple.name +' is a fruit');
  if pear   Is TFruit then ShowMessage(pear.name  +' is a fruit');

  // Apple is also a TApple type
  fruit := apple;
  if fruit Is TApple then ShowMessage(apple.name  +' is an apple');

  // But apple is not a pear
  if fruit Is TPear    // 'if apple is TPear' does not compile
  then ShowMessage(apple.name+' is a pear')
  else ShowMessage(apple.name+' is not a pear');
end;
end.
   Pink lady is a fruit
   Comice is a fruit
   Pink lady is an apple
   Pink lady is not a pear