Tôi đang xem một số mã và nó có tuyên bố này:
~ConnectionManager()
{
Dispose(false);
}
Lớp này thực hiện IDisposable
giao diện, nhưng tôi không biết đó có phải là một phần của dấu ngã (~) được sử dụng cho không.
Tôi đang xem một số mã và nó có tuyên bố này:
~ConnectionManager()
{
Dispose(false);
}
Lớp này thực hiện IDisposable
giao diện, nhưng tôi không biết đó có phải là một phần của dấu ngã (~) được sử dụng cho không.
Câu trả lời:
~ là kẻ hủy diệt
Hoàn thiện
Trong C #, phương thức Finalize thực hiện các hoạt động mà một hàm hủy C ++ tiêu chuẩn sẽ làm. Trong C #, bạn không đặt tên là Hoàn thiện - bạn sử dụng cú pháp hàm hủy C ++ để đặt ký hiệu dấu ngã (~) trước tên của lớp.
Vứt bỏ
Tốt nhất là loại bỏ các đối tượng trong một Close()
hoặc một Dispose()
phương thức có thể được gọi rõ ràng bởi người dùng của lớp. Hoàn thiện (hàm hủy) được gọi bởi GC.
Các IDisposable giao diện nói với thế giới rằng lớp học của bạn giữ lên các nguồn tài nguyên mà cần phải được xử lý và cung cấp cho người dùng một cách để phát hành chúng. Nếu bạn cần phải thực hiện một trình hoàn thiện trong lớp của mình, phương thức Vứt bỏ của bạn nên sử dụng GC.SuppressFinalize()
phương thức để đảm bảo rằng việc hoàn tất cá thể của bạn bị triệt tiêu.
Dùng gì?
Việc gọi một kẻ hủy diệt một cách rõ ràng là không hợp pháp. Trình hủy của bạn sẽ được gọi bởi trình thu gom rác. Nếu bạn xử lý các tài nguyên không được quản lý quý giá (như xử lý tệp) mà bạn muốn đóng và xử lý càng nhanh càng tốt, bạn nên triển khai giao diện IDis Dùng một lần.
Finalize
phương thức này được gọi đệ quy cho tất cả các trường hợp trong chuỗi thừa kế, từ dẫn xuất nhiều nhất đến dẫn xuất ít nhất" . Tuy nhiên, xin lưu ý rằng đó không phải là hành vi giống như bạn nhận được từ các hàm hủy kế thừa.
Đây là một quyết toán . Thành thật mà nói, bạn rất hiếm khi cần phải viết một bộ hoàn thiện. Bạn thực sự chỉ cần viết một nếu:
IntPtr
) và bạn không thể sử dụng SafeHandle
nó giúp việc này dễ dàng hơnIDisposable
trong một lớp không niêm phong. (Sở thích của tôi là niêm phong các lớp trừ khi chúng được thiết kế để kế thừa.) Bộ hoàn thiện là một phần của mẫu Loại bỏ chính tắc trong các trường hợp như vậy.Nó được sử dụng để chỉ ra hàm hủy cho lớp.
try/finally
khối thường vô dụng để đảm bảo rằng Finalize
phương thức cha được gọi. Hầu hết những điều đúng với kẻ hủy diệt đều đúng với người hoàn thiện, và ngược lại, nhưng những từ này có nghĩa là những điều hơi khác nhau.
Xem phần Cấu trúc (Hướng dẫn lập trình C #) . Tuy nhiên, hãy lưu ý rằng, không giống như C ++, lập trình viên không có quyền kiểm soát khi hàm hủy được gọi bởi vì điều này được xác định bởi trình thu gom rác.
~ thường đại diện cho một bộ giải mã. được chạy ngay trước khi một đối tượng chết.