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

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

Mã client nên có khả năng gọi đi gọi lại phương thức

Dispose

mà không gây ra các ảnh

hưởng bất lợi.

Trong các ứng dụng hỗ-trợ-đa-tiểu-trình, điều quan trọng là chỉ có một tiểu trình thực
thi phương thức

Dispose

. Thông thường, bảo đảm sự đồng bộ tiểu trình là nhiệm vụ của

mã client, mặc dù bạn có thể hiện thực sự đồng bộ bên trong phương thức

Dispose

.

Phương thức

Dispose

không nên ném ngoại lệ.

Vì phương thức

Dispose

dọn dẹp tất cả nên không cần gọi finalizer của đối tượng.

Phương thức

Dispose

của bạn nên gọi phương thức

GC.SuppressFinalize

để bảo đảm

finalizer không được gọi trong quá trình thu gom rác.

Hiện thực một finalizer sao cho phương thức

Dispose

sẽ được nó gọi theo một cơ chế

an toàn trong trường hợp mã client gọi

Dispose

không đúng. Tuy nhiên, nên tránh tham

chiếu đến các đối tượng được-quản-lý trong finalizer vì không rõ trạng thái của đối
tượng.

Nếu một lớp khả-hủy thừa kế một lớp khả-hủy khác, phương thức

Dispose

của lớp con

phải gọi phương thức

Dispose

của lớp cha. Gói phần mã của lớp con trong một khối

try

và gọi phương thức

Dispose

của lớp cha trong một mệnh đề

finally

để bảo đảm việc

thực thi.

Các phương thức và thuộc tính khác của lớp nên ném ngoại lệ

System.ObjectDisposedException

nếu mã client thực thi một phương thức trên một đối

tượng đã bị hủy.

Lớp

DisposeExample

dưới đây minh họa một hiện thực phổ biến của mẫu Dispose:

using System;

// Hiện thực giao diện IDisposable.

public class DisposeExample : IDisposable {

// Phần tử dữ liệu private dùng để báo hiệu

// đối tượng đã bị hủy hay chưa.

bool isDisposed = false;

// Phần tử dữ liệu private dùng để lưu giữ

// handle của tài nguyên không-được-quản-lý.

private IntPtr resourceHandle;

// Phương thức khởi dựng.

public DisposeExample() {

// Thu lấy tham chiếu đến tài nguyên không-được-quản-lý.

Liên Kết Chia Sẽ

** Đây là liên kết chia sẻ bới cộng đồng người dùng, chúng tôi không chịu trách nhiệm gì về nội dung của các thông tin này. Nếu có liên kết nào không phù hợp xin hãy báo cho admin.