Gần đây tôi đã thực hiện một lớp học như:Tại sao triển khai giao diện rõ ràng?
class TestClass : IDisposable
{
RegistryKey m_key;
public TestClass()
{
m_key = Registry.CurrentUser.OpenSubKey("Software", false);
}
public void Dispose()
{
// m_key.Dispose();
IDisposable disp = m_key;
disp.Dispose();
}
}
Nếu tôi bỏ ghi chú các cuộc gọi trực tiếp để Vứt bỏ, tôi nhận được lỗi CS0117 (" 'Microsoft.Win32.RegistryKey' không chứa một định nghĩa cho 'Vứt bỏ"). Một số Googling dẫn tôi đến this thread, nơi tôi đã học được những gì đang diễn ra, vì vậy bây giờ tôi đã hiểu được cơ chế của nó. Tài liệu MSDN cho thấy tác giả muốn tôi gọi Close() thay vì Dispose(), nhưng không giải thích tại sao.
Mục đích của mẫu này (tôi nghĩ rằng tôi đã nhìn thấy nó trong các lớp IO) là gì? Trong thực tế rằng đây là một quyết định có chủ ý của tác giả lớp, làm thế nào xấu là mã ở trên (các cuộc gọi để Vứt bỏ thông qua giao diện IDisposable)? Nó không thể quá tệ - sau khi tất cả, đó là những gì sẽ xảy ra trong một tuyên bố sử dụng, phải không?
[chỉnh sửa: 1) thay đổi tiêu đề từ "phi công" để "rõ ràng" 2) loại bỏ việc thực hiện rõ ràng từ mã của tôi, vô tình còn lại trong từ thử nghiệm]
Bạn có thể sử dụng '(m_key như IDisposable) .Dispose();' để viết tắt. –