FreeBASIC Destructor
目次→言語リファレンス→変数とデータ型→ユーザ定義型→DESTRUCTOR←オリジナル・サイト
クラスかユーザ定義型が、範囲から出るか、または使えなくするとき、自動的に呼ばれます。
構文:
Type typename
field declarations
Declare Destructor ( )
End Type
Destructor typename ( ) [ Export ]
statements
End Destructor
パラメタ:
記述:
typename は、
Destructor メソッドが宣言され、定義される型の名前です。
typename のための名前解決は、
Namespace で使われる手続きとして、同じ規則に従います。
Destructor メソッドは、
typename と同じ型の、隠された
this パラメタを、渡されます。
型の中の解体子は、型のどの項目の解体子より先に、呼ばれます。
したがって、すべての項目は、解体子本体の中で、隠された
this パラメタを使って、アクセスできます。
型ごとに、宣言および定義できる解体子は 1つだけです。
(ただし、その型が、他の型自身の解体子を含むか継承している場合は、複数の解体子を連鎖的に呼び出すことができます。)
End 命令文は、どの範囲も閉じないので、
End 命令文が、プログラムを終了させるのに使われても、オブジェクト解体子は、自動的には、呼ばれません。
Destructor も、他のメンバー・メソッド(
Sub)のように、そして同じ構文、つまり、メンバー・アクセス演算子(例えば、
obj.Destructor() を使用して、
typename インスタンスから直接呼ぶことができます。
オブジェクトと、すべてのそのメンバーは、構築されて、有効な状態にあると仮定されます。
そうでないと、その影響は未定義で、事故の原因となる場合があります。
この構文は、
obj が手で構築された場合、役に立ちます。例えば、
obj.constructor() や
演算子 配置 Newで。
例:
Type T
value As ZString * 32
Declare Constructor
( init_value As String )
Declare Destructor
()
End Type
Constructor T
( init_value As String )
value = init_value
Print "作成します:
";value
End Constructor
Destructor T
()
Print "解体します:
";value
End Destructor
Sub MySub
Dim x As T =
("A.x")
End Sub
Dim x As T =
("main.x")
Scope
Dim x As T =
("main.scope.x")
End Scope
MySub
Sleep
出力:
作成します: main.x
作成します: main.scope.x
破壊します: main.scope.x
作成します: A. x
破壊します: A. x
破壊します: main.x ←何故か渡辺の画面には表示されません(^^ゞ
方言差:
QBからの違い:
参照:
ページ歴史:2018-08-29 07:17:23
日本語翻訳:WATANABE Makoto、原文著作者:JeffMarshall