クラスの階層構造における New メソッドと Finalize メソッドの動作
更新 : 2007 年 11 月
クラスのインスタンスが作成されると、そのオブジェクト内に存在する場合、共通言語ランタイム (CLR: Common Language Runtime) は New という名前のプロシージャを実行しようとします。New は、constructor と呼ばれるプロシージャの一種です。これは、オブジェクト内の他のコードを実行する前に、新しいオブジェクトを初期化するために使用されます。New コンストラクタを使用すると、ファイルを開いたり、データベースに接続したり、変数を初期化するなど、オブジェクトを使用できるようにするために事前に実行する必要があるタスクを処理できます。
派生クラスのインスタンスが作成されるときには、まず基本クラスの Sub New コンストラクタが実行され、その後に派生クラスのコンストラクタが実行されます。これは、Sub New コンストラクタのコードの最初の行が、MyBase.New() 構文を使用して、クラスの階層構造でこのクラスのすぐ上のクラスのコンストラクタを呼び出すためです。基本クラスのコンストラクタにたどり着くまで、クラスの階層構造の各クラスに対して Sub New コンストラクタが呼び出されます。基本クラスにたどり着くと、基本クラスのコンストラクタのコードが実行され、続いてすべての派生クラスの各コンストラクタのコードが実行されます。最後に実行されるのは、最派生クラスのコードです。
オブジェクトが不要になると、CLR は、メモリを解放する前にそのオブジェクトの Finalize メソッドを呼び出します。Finalize メソッドは、状態情報を保存したり、ファイルとデータベースへの接続を閉じるなど、オブジェクトを解放する前に実行する必要があるクリーンアップ タスクを処理するため、destructor と呼ばれます。