Trong .NET environment, khi một object sẽ bị huỷ, bộ nhớ và resources nó dùng sẽ được thu hồi khi không còn tham chiếu nào đến object đó.
Khi dùng một object, biến sẽ giữ một tham chiếu hay con trỏ đến object đó.
Ví dụ
Dim myPerson As New Person()
Nghĩa là biến myPerson chỉ tham chiếu đến object vừa tạo. Nếu có đoạn code sau:
Dim anotherPerson As Person
anotherPerson = myPerson
Nghĩa là biến anotherPerson cũng tham chiếu đến cùng một object. Điều này có nghĩa là object Person thì được tham chiếu bởi 2 biến: myPerson và anotherPerson.
Khi không còn biến nào tham chiếu đến object, nó sẽ được .NET framework terminated. Cụ thể, nó sẽ được terminated và thu hồi bởi một cơ chế gọi là garbage collection.
Không giống COM (vd VB6), .NET framework không dùng cách đếm số tham chiếu để quyết định việc có huỷ object đó hay không. Thay vào đó, nó dùng một cơ chế khác để quyết định việc huỷ object đó.
Điều đó có nghĩa là, trong Visual Basic (hay .NET), ta không cần quyết định việc huỷ object đó, bởi vì không thể quyết định chính xác khi nào object sẽ được huỷ.
Để chấm dứt tham chiếu đến một object. Ta có thể gỡ tham chiếu một cách cụ thể bằng cách gán Nothing vào biến đó bằng đoạn code sau:
myPerson = Nothing
Ta cũng có thể gỡ bỏ tham chiếu tới một object bằng cách thay đổi tham chiếu của biến tới một object khác. Vì một biến chỉ có thể tham chiếu tới một object tại một thời điểm. Ta có thể code như sau:
myPerson = New Person()
Biến sẽ tham chiếu tới một object mới, vì thế, sẽ release tham chiếu tới object trước đó.
Đây là ví dụ về explicit dereferencing, VB còn cung cấp một phương pháp thuận tiện hơn để gỡ bỏ tham chiếu đến một object gọi là implicit dereferencing khi biến đó out of scope.
Ví dụ, nếu ta có một biến được mô tả trong một method, khi method hoàn tất, biến đó sẽ được tự động huỷ, như vậy cũng sẽ huỷ tham chiếu đến những object đã được tham chiếu.
Tóm lại, Bất cứ lúc nào biến tham chiếu đến một object out of scope, tham chiếu đến object đó sẽ tự động được huỷ. Ví dụ:
Private Sub DoSomething()
Dim myPerson As Person
myPerson = New Person()
End Sub
Cho dù ta không gán giá trị của myPerson là Nothing một cách cụ thể, ta biết rằng biến myPerson sẽ bị huỷ khi method kết thúc, sau khi nó out of scope. Tham chiếu đến Person object được tạo trong hàm sẽ hoàn toàn được gỡ bỏ.
Dĩ nhiên, sẽ có một kịch bản khác trong đó object sẽ bị huỷ khi ứng dụng hoàn toàn kết thúc. Vào lúc này, tất cả các biến sẽ bị huỷ, và tất cả tham chiếu đến object sẽ hoàn toàn kết thúc.
(Tham khảo: Wrox.Professional.VB.2005.Nov.2005.pdf – Chương 4, Trang 115)