CÁC GIẢI PHÁP LẬP TRÌNH C# - Trang 631

631

Chương 16: Các giao diện và mẫu thông dụng

// resourceHandle = ...

}

// Destructor/Finalizer.

~DisposeExample() {

// Gọi phiên bản nạp chồng protected của Dispose

// và truyền giá trị "false" để cho biết rằng

// Dispose đang được gọi trong quá trình thu gom rác,

// chứ không phải bởi mã consumer.

Dispose(false);

}

// Hiện thực public của phương thức IDisposable.Dispose, được gọi

// bởi consumer của đối tượng để giải phóng các tài nguyên không-

// được-quản-lý một cách tất định.

public void Dispose() {

// Gọi phiên bản nạp chồng protected của Dispose và truyền

// giá trị "true" để cho biết rằng Dispose đang được gọi

// bởi mã consumer, chứ không phải bởi bộ thu gom rác.

Dispose(true);

// Vì phương thức Dispose thực hiện tất cả việc dọn dẹp cần

// thiết nên bảo đảm bộ thu gom rác không gọi destructor của lớp.

GC.SuppressFinalize(this);

}

// Phiên bản nạp chồng protected của phương thức Dispose. Đối số

// disposing cho biết phương thức được gọi bởi mã consumer (true),

// hay bởi bộ thu gom rác (false).

protected virtual void Dispose(bool disposing) {

if (!isDisposed) {

if (disposing) {

// Phương thức này được gọi bởi mã consumer. Gọi