Trong Visual Studio, khi tôi gõ dòng "Implements IDisposable
", IDE sẽ tự động thêm:VB.NET - Một phương thức hoàn thiện có nên được bổ sung khi triển khai IDisposable không?
- một biến
disposedValue
viên - một
Sub Dispose() Implements IDisposable.Dispose
- một
Sub Dispose(ByVal disposing As Boolean)
Các Dispose()
nên còn lại một mình, và mã làm sạch nên được đặt trong Dispose(disposing)
.
Tuy nhiên, Dispose Finalize Pattern cho biết bạn cũng nên ghi đè Sub Finalize()
để gọi Dispose(False)
. Tại sao IDE cũng không thêm điều này? Tôi có phải tự thêm vào nó, hoặc bằng cách nào đó được gọi là ngầm?
EDIT: Bất kỳ ý tưởng nào tại sao IDE tự động thêm 80% nội dung yêu cầu nhưng bỏ qua phương thức Hoàn tất? Không phải là toàn bộ điểm của loại tính năng này để giúp bạn
không phải quên những điều này?
EDIT2: Cảm ơn tất cả các câu trả lời tuyệt vời của bạn, điều này giờ đây có ý nghĩa hoàn hảo!
Thực hiện Vứt bỏ không có nghĩa là bạn cũng nên triển khai trình kết thúc. Bạn có thể giải phóng tài nguyên không được quản lý trong một phương thức Vứt bỏ mà không cần đến trình hoàn thiện. Nếu bạn phải thực hiện một finalizer, logic dọn dẹp thực tế của bạn phải ở trong một chức năng riêng biệt mà cả hai xử lý và hoàn thành cuộc gọi. –
Không chính xác.Nếu bạn chỉ dựa vào Dispose() để giải phóng tài nguyên không được quản lý, thì bộ nhớ sẽ bị rò rỉ trong trường hợp Dispose không được gọi. Đó là chính xác những gì finalizer là có cho. – Laurent
Không chắc tại sao tôi không trả lời nhận xét của Scott trước đó - không được để ý, nhưng Laurent nói đúng - nếu Dispose của bạn dọn dẹp tài nguyên không được quản lý, cần phải có Finalize để đảm bảo an toàn. Đừng bỏ nó đi vì bạn lười biếng. –