プログラム終了処理で、手続きの実行を指定します。
構文:
記述:
コンパイルしたプログラムのエンド・コードから自動的に呼ばれる手続きを、定義します。
エンド・コードは、コンパイラが発生して、プログラムが正常に終わるときに、実行されます。
解体子と定義された手続きは、普通の手続きと同じように用いられます。すなわち、
他の手続きからも、モジュール・レベル・コードからも、呼ぶことができます。
手続きは、空のパラメータ・リストが必要です。
Destructor 予約語が、1つ以上のパラメタを持っている Sub 定義に使われると、コンパイル時にエラーになります。
多重定義の手続きのセットでは、引数を取らない複数の Sub を持つあいまいさのため、1(1)解体子だけしか定義することができません。
一つのモジュールで、解体子は、通常、それらが定義される順番で実行されます。
単一のモジュールで、ターゲット・システムのビルドおよび実行時環境に応じて:
-
デストラクタは、定義されている順序で実行することも、逆の順序で実行することもできます。
-
デストラクタは、デストラクタを持つ、グローバル静的変数の前後で実行できます。
-
デストラクタは、priority 属性を持つ、他のモジュール・デストラクタの前後で実行することができます。
-
priority 属性を持つデストラクタは、デストラクタを持つ、グローバル静的変数の前後で実行できます。
priority 属性(101 から 65535 までの整数)を使って、デストラクタを、特定の順序で強制的に実行することができます。
priority の値には特別な意味はなく、他のデストラクタ優先順位との番号の関係だけがあります。
101 が最も低い優先順位で、
priority 属性を持つ他のデストラクタと比較して、最後に実行されます。
モジュールは、複数のデストラクタ手続きを定義できます。
デストラクタ手続きは、複数のモジュールにも使えます。
上記の構文で定義されたすべての手続きは、プログラムの終了時に呼び出される手続きのリストに、追加されます。
複数のモジュールで定義されたデストラクタが実行される順序は、リンク時にのみわかります。
したがって、デストラクタも定義している、2次モジュールを呼び出す可能性があるデストラクタを使う場合は、特に注意が必要です。
このような場合は、アプリケーションの正常な終了を保証するために、複数のモジュールの終了手続きを明示的に呼び出す、単一のデストラクタを使うことを推奨します。
プログラムが正常に終了した場合、またはエラーチェックが有効でプログラムが異常終了した場合に、デストラクタが呼び出されます。
ユーザー定義
type の、パブリック静的メンバー手続き(空のパラメータ・リストを持つ
Sub)は、サブ手続きの定義で使われる
Constructor キーワードを追加することによって、モジュール・デストラクタとして定義できます。
モジュール・デストラクタ機能は、ビルドおよび実行時環境の、低レベルのリンク時機能を提示します。
モジュール・デストラクタから、デストラクタを持つグローバル静的オブジェクトへのアクセスは、ビルド・システムごとに実行順序が異なるため、避けるべきです。
64-bit コンパイラのみの警告:ユーザー手続きの識別子名の選択については、
識別子規則 を参照してください。(特に「プラットフォームの違い」の段落)
例:
Sub pauseonexit Destructor
'' プログラムが終わり達するか、またはエラーで中止になると
'' 終了する前に、この解体子を走らせます。
Print "プログラムを終わらせるために、何かキーを押して下さい..."
Sleep
End Sub
Dim array(0 To 10, 0 To 10) As Integer
Dim As Integer i = 0, j = 11
'' 配列の範囲をチェック可能でコンパイルすると、(fbc -exx ...)
'' 次の行は、エラーで中止になります。
Print array
(i, j)
QBからの違い:
参照: