一.  内建类定义:
    //类的成员有:字段(field),方法(method)和属性(property)
    // 对象是类的实体,拥有:方法(method),事件(event)和属性(property)
    //对象不能操作到类所声明的字段(成员变量),而且对象的属性不完全等同于类的属性
 

type
  TCheckListBox = class(TCustomListBox)
     //类名       //继承于TCustomListBox。若省略,继承于TObject;
  
  //类的成员变量(字段),对象不能直接访问,要通过成员函数访问
  private
    FAllowGrayed: Boolean;            
    procedure ResetItemHeight;

   //类的成员函数,属于“类方法”,只是在类中运行
    procedure DrawCheck(R: TRect; AState: TCheckBoxState; AEnabled: Boolean);
    procedure SetChecked(Index: Integer; AChecked: Boolean);
  
  //一般成员函数,构造后为:对象的方法
  protected
    procedure CreateWnd; override;
  public
    constructor Create(AOwner: TComponent); override;
    destructor Destroy; override;
 
   //类属性与对象属性的区别:
   //  类的属性是对象之间传递信息的接口,决定了对象内部数据的读取及改变方式
   //  一般常见属性所指的是对象所具有的属性
   //  具体而言,类属性是指开头加property的成员,构造成对象后,根据性质划分为对象的属性和事件
 
  //此为“属性”的一部分,构造后为:对象的属性
  published
    property OnClickCheck: TNotifyEvent read FOnClickCheck write FOnClickCheck;
    property Align;
 
   
    //此为“属性”的一部分,构造后为:对象的事件
    property OnClick;
 
  end;
二.  自定义类定义:

type Tchecked= object(Tcheck)
     成员表;
     end;
 
三.  对象的构造与析构:
     1.内建类:要用create和destroy
 
       //对象构造方法定义必须以保留字“constructor”代替“procedure”或“function”
       //析构函数用“destructor”
 
     2.自定义类:不需要用create和destroy,就可以直接构造一个对象,接着也就可以操作对象的成员。
       
       //此种方法构造的对象并未分配内存空间,只是跟一般变量一样,当程序执行到该例程(routine),
       //在编译时先分配对象变量的内存空间,离开例程时,立即释放内存空间。
       //在内存空间的使用上,情况和记录类(record)的变量相同。
     3.析构函数:
            destroy是默认的析构方法,它只是删除对象的变量,也就是删除它的参考,而未删除对象的
       实体,而且也不能释放对象所占的实体空间。所以,程序未中止前,未释放的内存空间就不能再用。
            free不但具备destroy的功能,删除对象变量,还可以将对象的实体释放掉。且即使欲析构的
       对象未构造实体,仍然可以正常执行,将所定义的对象删除掉。