1、声明和实例化程序员
在使用一个对象以前,用class关键字声明一个对象。能够在一个程序或单元的type部分声明一个对象类型:安全
type TFooObject = class;
除了声明一个对象类型,一般还须要一个对象的变量,即实例。实例定义在var部分spa
var FooObject; TFooObject;
在Delphi中经过调用它的一个构造器来创建一个对象的实例,构造器主要是用来为对象建立实例并为对象中的域分配内存进行初始化使得对象处于可以使用的状态。指针
Delphi的对象至少有一个构造器称为create(),可是一个对象能够有多个构造器。根据不一样的对象类型,Create()能够有不一样的参数。对象
不像在C++中,在Delphi中构造器不能自动调用,程序员必须本身调用构造器,调用构造器的语法以下blog
FooObject:= TFooObject.Create;
注意这里调用构造器的语法有一点特殊,是经过类型来引用一个对象的Create()方法,而不是像其余方法那样经过实例来引用。这看上去有点奇怪,可是颇有意义。变量FooObject在调用时尚未被定义,而TFooObject已经静态地存在于内存之中,静态调用它的Create()方法是合法的。内存
经过调用构造器来建立对象的实例,这就是所谓的实例化作用域
注意:当一个对象实例用构造器建立的时候,编译器将对对象的每个域经行初始化,你能够放心地认为全部数字被赋值为0,全部指针赋值为NIL,全部字符串为空字符串
2、析构编译器
当用完对象,应该调用这个实例的Free()方法来释放它。Free()首选进行检查保证这个对象实例不为NIL,而后调用对象的析构方法Destroy()。天然,析构进行与构造相反的工做,它释放全部分配的空间,并执行一些其余操做以保证对象可以适当地移除内存。语法
FooObject.free;
不像调用Create(),这里是调用对象实例的Free()方法,记住不要直接调用Destroy(),而调用更安全的Free()方法,由于Free()首选进行检查保证这个对象实例不为NIL,而后调用对象的析构方法Destroy()。
警告:在C++中,一个静态声明的对象在离开它的做用域时自动调用它的析构方法,可是要对动态生成的对象手动调用析构方法。这个规则在Delphi里面也适用,全部使用Create()动态声明建立的对象即便离开建立它时候的做用域,它也不会被自动释放,必须使用Free()方法来动态的析构,除了在Delphi中的隐式动态建立的对象,因此必定要记住这个规则:凡是建立的,都须要释放。这个规则有两个重要的特例
1)当对象被其余对象拥有时,它将替你释放对象。
2)引用技术的对象,当最后一个引用释放时,它将被析构。
你可能要问,这些方法是怎样进到对象中的,不须要为这些方法写代码,对吗?是的,刚才讨论的方法来自于Object Pascal的基类TObject对象。在Object Pascal中全部的对象都是TObject对象的后代,而无论它们是不是这样声明的。所以,下面的声明:
type TFoo = class;
至关于声明成
type TFoo = class(TObject);