Constructor (模块)
 
指定在模块级代码之前执行一个过程

语法

[Public | Private] Sub procedure_name [Alias "external_identifier "] [()] Constructor [priority ] [Static]
{ procedure body }
End Sub

说明

Sub定义中使用Constructor关键字强制执行程序之前的模块级代码。定义为构造函数的过程可以与普通过程相同的方式使用,也就是说可以从模块级代码中调用它们以及其他过程。

该过程必须有一个空参数列表。如果在具有一个或多个参数的子定义中使用Constructor关键字,则将生成编译时错误。在一组重载过程中,由于具有多个不含参数的Subs的含义,所以只能定义一个(1)构造函数。

在单个模块中,构造函数通常按照它们被定义的相反顺序执行。

priority 属性(介于101和65535之间的整数)可用于强制以特定顺序执行构造函数。priority 的值没有具体含义,只有数字与其他构造器优先级的关系。101是最高优先级,首先执行。具有priority 属性的所有构造函数都在没有属性的构造函数之前执行。优先级值65535与不赋值优先级值相同。

模块可以定义多个构造函数过程,并且多个模块可以定义附加的构造函数,没有两个Public构造函数共享相同的procedure_name .

当链接还定义构造函数的模块时,除非使用priority 属性,否则链接时不能保证执行顺序。因此,当使用可能在定义构造函数的辅助模块上调用的构造函数时,应特别小心。在这种情况下,建议使用一个明确调用这些模块中的初始化过程的构造函数。

例子

''ConDesExample.bas:一个定义两组的示例程序
''构造函数和析构函数。en演示何时和以什么顺序
''当链接单个模块时,它们被调用。

Sub Constructor1() Constructor
    Print "Constructor1()调用"
End Sub

Sub Destructor1() Destructor
    Print "Destructor1()调用"
End Sub

Sub Constructor2() Constructor
    Print "Constructor2()被调用"
End Sub

Sub Destructor2() Destructor
    Print "Destructor2()调用"
End Sub

    ''----------------------
    Print "模块级代码"

    End 0
    ''----------------------

输出:
Constructor2() called
Constructor1() called
module-level code
Destructor1() called
Destructor2() called

与QB差别

  • 新的FreeBASIC

参考