类和对象是相关但不相同的概念。对象是一个类的实例,而类可以有零个或多个实例。对象(object)是相关函数和数据的一个包。类只是一个模板,从中可以创建特定的实例。用户在PowerBuilder中创建的所有窗口都属于类Window。对象是类的实际物理表示,是用户创建和取消的内容。
PowerBuilder将每个类——系统类以及用户所创建的类——定义为一个数据类型并将它们作为一个层次结构来维护。
使用Object Browser,用户可以设置希望缩放的特定类的类型。
创建和删除类
可以用Create语句生成对象类的一个实例。必须使用该语句的唯一类就是不可视用户对象,如标准类(例如transaction和error)或弹出式菜单。可视的用户对象和窗口应该用相应的Open()函数创建。在用户访问对象的特性和方法前必须用Create语句实例化一个对象变量。例如,要创建Error对象的一个本地版本,代码为:
//对象变量eMyError,对象类Error
Error eMyError
eMyError = Create Error
eMyError.Line = 1
例如,要创建一个可视化的用户窗口类w_about的实例,代码为:
Open(w_about)
//或用局部变量wInstance1指向这个实例
w_about wInstance1
Open(wInstance1,"w_about")
警告:如果用Create来建立窗口类的一个非可视实例,则不触发Open事件。事实上,与可视窗口相关联的所有事件都不会触发,因为窗口的图形组件无法生成。
当用户使用Create语句时,PowerBuilder为该对象分配内存。该内存一直保持到由Destroy语句释放它为止。例如,在上述示例的脚本的结尾,要求的代码为:
Destroy eMyError
类和实例池
PowerBuilder维护了三个独立的内存池用于跟踪类、实例和Windows显示信息。
当首次对一个特定类实例化时,将把类定义调入类池中,然后在实例池中创建一个实例。该对象随后的实例化将直接从类池中提取其定义。根据实例化对象的方式,该实例的一个指针要么在全局内存中,要么位于所使用变量的作用域层。PowerBuilder用另一个池——Windows池保存某个对象的实际Windows显示方面的信息。最后这个Windows池仅用于可视类,如窗口、菜单和用户对象。