模块构造函数和析构函数
- 来源: https://www.freebasic.net/wiki/wikka.php?wakka=ProPgProcCtorsDtors
- 最后更新: 2019-09-20
模块级代码之前/之后执行的模块构造函数/析构函数。
前言:
不要将模块构造函数(析构函数)与 UDT 构造函数(析构函数)混淆,后者在 UDT 实例的创建(销毁)时运行。
模块构造函数(析构函数)允许指定在程序开始(结束)时执行的过程。
描述
构造函数(析构函数)关键字用于强制在模块级代码之前(之后)执行过程。
定义为模块构造函数或析构函数的过程可以像普通过程一样使用(它们也可以从模块级代码内部调用)。
一个模块可以定义多个构造函数和析构函数过程。
在单个模块中,取决于目标系统的构建和运行时环境:
模块构造函数(析构函数)可能按照定义的顺序或相反顺序执行,
模块构造函数(析构函数)可能在具有构造函数(析构函数)的全局静态变量之前或之后执行,
模块构造函数(析构函数)可能在具有优先级属性的其他模块构造函数(析构函数)之前或之后执行,
具有优先级属性的模块构造函数(析构函数)可能在具有构造函数(析构函数)的全局静态变量之前或之后执行。
模块的构造函数和析构函数始终被执行(与其主代码一样),即使它被编译为次要模块或静态库,或者甚至作为动态库(dll)加载。
语法
[Public | Private] Sub procedure_name [Alias "external_identifier"] [()] {Constructor | Destructor} [priority] [Static]
{ procedure body }
End Sub用法
构造函数(析构函数)关键字仅在 Sub 定义中使用(禁止在声明行级别使用)。
定义为构造函数(析构函数)的 Sub 可以像普通 Sub 一样使用(它们可以从模块级代码内部调用)。
Sub 必须具有空参数列表。
优先级属性是 101 到 65535 之间的整数,可用于强制构造函数(析构函数)以特定顺序执行,相对于同样具有优先级属性的其他构造函数(析构函数)。
优先级值没有特定含义,只有数字与其他构造函数(析构函数)优先级的关系才有意义。
101 是最高(最低)优先级,相对于同样具有优先级属性的其他构造函数(析构函数),它最先(最后)执行。
UDT 的公共静态成员 Sub(具有空参数列表)可以定义为模块构造函数(析构函数),方法是在 Sub 定义中添加构造函数(析构函数)关键字。
由于不同构建系统上执行顺序的差异,应避免从模块构造函数(析构函数)中访问具有构造函数(析构函数)的全局静态对象。
参见
返回 目录