.NETでは、オブジェクト自体の破棄ガベージコレクタ(garbage collector)によって行われます。 newによって作成したあと、どこからも参照されなくなった・使用されなくなったオブジェクト(garbage)は定期的に収集(collect)されることにより、確保されていた領域が解放されます。 オブジェクトはnewによって任意のタイミングで作成できる一方で、delete object;のような構文を用いて明示的にオブジェクトを破棄・解放することはできません。

VB6以前ではNothingを代入することでオブジェクトを破棄していましたが、.NETでは(C#/VBともに)null/Nothingを代入することはオブジェクトの破棄を明示的に指示するものにはなりません。 (オブジェクトの参照が破棄されることにより、ガベージコレクタによって収集されやすくなる可能性はあるが、不要になった時点でnull/Nothingを代入することは明確に推奨されてはいない)

また、オブジェクトが保持(内包)しているオブジェクトもガベージコレクタによって自動的に収集されます。 このため、例えばコンストラクタでnewしたオブジェクトをファイナライザ(デストラクタ)で破棄する必要もありません。

クラスに保持されるオブジェクトの作成と破棄
Imports System
Imports System.Collections.Generic

Class C
  Private ReadOnly l As List(Of String)

  ' コンストラクタ
  Public Sub New()
    l = New List(Of String)() ' オブジェクト(List)を確保する
  End Sub

  ' ファイナライザ (あくまで例示、実際は実装する必要がない)
  Protected Overrides Sub Finalize()
    Delete l ' オブジェクト'l'はガベージコレクタによって自動的に収集されるので、
             ' このように明示的に破棄する必要はない (そもそもそのような構文がない)
  End Sub
End Class

ガベージコレクタによって管理(manage)され、収集対象となるマネージリソース(manage resources)の場合は、上記のように明示的に破棄・解放する必要はなく、そもそも明示的に破棄・解放することもできません。 一方、ガベージコレクタによって管理されない・収集対象外となるアンマネージリソース(unmanage resources)の場合は、確保した側の責任で破棄・解放を行う必要があります。

つまり、オブジェクト自体はガベージコレクタによって自動的に破棄・解放される一方、オブジェクトがアンマネージリソースを保持している場合、それらのリソースは明示的に破棄・解放を行う必要があります。