Dispose()
sẽ không được gọi tự động. Nếu có finalizer, nó sẽ được gọi tự động. Việc triển khai IDisposable
cung cấp cách để người dùng của lớp của bạn sớm phát hành tài nguyên, thay vì đợi cho người thu gom rác.
Cách thích hợp hơn cho khách hàng là sử dụng câu lệnh using
xử lý cuộc gọi tự động Dispose()
ngay cả khi có ngoại lệ.
Một thực hiện đúng IDisposable
là:
class MyClass : IDisposable
{
private bool disposed = false;
void Dispose()
{
Dispose(true);
GC.SuppressFinalize(this);
}
protected virtual void Dispose(bool disposing)
{
if(!disposed)
{
if(disposing)
{
// Manual release of managed resources.
}
// Release unmanaged resources.
disposed = true;
}
}
~MyClass() { Dispose(false); }
}
Nếu người dùng của lớp gọi Dispose()
dọn dẹp diễn ra trực tiếp. Nếu đối tượng bị thu thập bởi bộ thu gom rác, nó sẽ gọi Dispose(false)
để thực hiện việc dọn dẹp. Xin lưu ý rằng khi được gọi từ trình hoàn thiện (phương thức ~MyClass
), các tham chiếu được quản lý có thể không hợp lệ, vì vậy chỉ có thể phát hành các tài nguyên không được quản lý.
Nguồn
2011-08-06 13:32:55