ファイナライザはガベージコレクタからによってのみ呼び出されるものであるため、ファイナライザを実装してもそれを直接・明示的に呼び出すことはできません。 また、オブジェクトを明示的に破棄するdelete objのような構文もありません。 VB6以前に存在したSet obj = NothingのようなNothingの代入は、.NETのVBにおいては単に参照の放棄となり、即座にオブジェクトの破棄(およびファイナライザの呼び出し)を指示するものとはなりません。 C#におけるnullの代入も同様です。

ファイナライザを直接・明示的に呼び出すことはできない
Imports System

Class Resource
  Protected Overrides Sub Finalize()
  End Sub

  Public Sub Free()
    Me.Finalize() ' コンパイルエラーとはならないが、このような呼び出しは避けたほうがよい(IDisposable.Disposeを実装すべき)
  End Sub
End Class

Class Sample
  Shared Sub Main()
    Dim res As New Resource()

    res.Finalize() ' error BC30390: 'Resource.Protected Overrides Sub Finalize()' は 'Protected' であるため、このコンテキストではアクセスできません。

    Set res = Nothing ' error BC30807: 'Let' および 'Set' 代入ステートメントはサポートされなくなりました。
    res = Nothing ' 単に参照が放棄されるだけで、オブジェクトの破棄・ファイナライザ呼び出しを直接指示するものとはならない
  End Sub
End Class

何らかの終了処理・解放処理を行わせたい場合は、ファイナライザを直接呼び出すのではなく、IDisposable.Disposeメソッドあるいは専用のメソッドを用意し、それを呼び出すようにします。

ファイナライザがオーバーライドされたクラスを継承し、派生クラスでもファイナライザを実装するような場合については、§.ファイナライザとIDisposableのデザインパターン (disposeパターン)を参照してください。

MENTAにてテキストチャットによるサポートを行っています。 問題の解決法をお探しの方や.NET/C#を学習中の方はどうぞご利用ください。