Tôi biết kỹ thuật xử lý IDisposable theo cách truyền thống. Giả sử, trong phương thức phục vụ cửa sổ OnStop() Tôi kết thúc sứ điệp hàng đợi khách hàng:Xử lý bằng cách đặt thành null?
if (client != null)
{
client.Dispose();
}
Đây là lần đầu tiên hôm nay tôi thấy một anh chàng làm điều đó theo cách này:
using (client)
{
client = null;
}
chính xác là gì xảy ra bên trong mình "sử dụng" hay anh ta vứt bỏ một cách chính xác?
BTW, một điều tôi nghĩ rằng sẽ nâng cao khả năng sử dụng "sử dụng" sẽ là khả năng đặt rõ ràng "biến bóng" thành null, để đối tượng không được xử lý hoặc phiên bản "sử dụng" khác sẽ chỉ xử lý trong trường hợp có lỗi. Một nhà xây dựng, ví dụ, sau đó có thể "sử dụng" các lĩnh vực của đối tượng được xây dựng, và sau đó quyết định "giữ" chúng ngay trước khi nó trở lại. Có thể sử dụng try/finally blocks thay vì "using", nhưng chúng tiết kiệm hơn và ít rõ ràng hơn. – supercat
@supercat IMO rằng kịch bản đã khá phức tạp - tốt hơn để được rõ ràng về nó, và hiểu những gì đang xảy ra (tức là tôi hài lòng với 'try' /' final' there) –
Tôi chỉ nhìn vào mã một lần nữa và suy nghĩ Tôi đã tìm ra mục đích - nếu "khách hàng" là một lĩnh vực hoặc tài sản, tuổi thọ của nó có thể không bị giới hạn trong một khối "đang sử dụng". Trong một số trường hợp, có thể cần phải xóa một trường hoặc thuộc tính giữ một tham chiếu đến đối tượng trước khi gọi Dispose lên nó. Mã "sử dụng" được hiển thị ở đây sẽ ngắn gọn hơn việc tạo một biến tạm thời một cách rõ ràng, mặc dù cách tiếp cận tốt hơn là sử dụng thói quen "Zap" cho một mục đích như vậy. – supercat