使⽤Delphi对象(声明、实例化、构造、释放)
⼀、声明和实例化
在使⽤⼀个对象之前,⽤class关键字声明⼀个对象。可以在⼀个程序或单元的type部分声明⼀个对象类型:
type
TFooObject = class;
除了声明⼀个对象类型,通常还需要⼀个对象的变量,即实例。实例定义在var部分
var
FooObject; TFooObject;
在Delphi中通过调⽤它的⼀个构造器来建⽴⼀个对象的实例,构造器主要是⽤来为对象创建实例并为对象中的域分配内存进⾏初始化使得对象处于可使⽤的状态。
Delphi的对象⾄少有⼀个构造器称为create(),但是⼀个对象可以有多个构造器。根据不同的对象类型,
Create()可以有不同的参数。
不像在C++中,在Delphi中构造器不能⾃动调⽤,程序员必须⾃⼰调⽤构造器,调⽤构造器的语法如下
FooObject:= TFooObject.Create;
实例化类和实例化对象 注意这⾥调⽤构造器的语法有⼀点特殊,是通过类型来引⽤⼀个对象的Create()⽅法,⽽不是像其他⽅法那样通过实例来引⽤。这看上去有点奇怪,但是很有意义。变量FooObject在调⽤时还没有被定义,⽽TFooObject已经静态地存在于内存之中,静态调⽤它的Create()⽅法是合法的。
通过调⽤构造器来创建对象的实例,这就是所谓的实例化
注意:当⼀个对象实例⽤构造器创建的时候,编译器将对对象的每⼀个域经⾏初始化,你可以放⼼地认为所有数字被赋值为0,所有指针赋值为NIL,所有字符串为空
⼆、析构
当⽤完对象,应该调⽤这个实例的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);
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论