C# có câu lệnh using
, cụ thể cho các đối tượng IDisposable. Có lẽ, bất kỳ đối tượng nào được chỉ định trong câu lệnh using
sẽ giữ một số loại tài nguyên cần được giải phóng một cách xác định.Thực hành không tốt? Sử dụng không chính thức câu lệnh sử dụng C#
Tuy nhiên, có vẻ như với tôi rằng có rất nhiều mẫu thiết kế trong lập trình có một đầu, kết thúc duy nhất và kết thúc, nhưng thiếu hỗ trợ ngôn ngữ nội tại. Cấu trúc using
cung cấp cơ hội sử dụng tính năng được tích hợp sẵn của trình chỉnh sửa mã, ít nhất, rõ ràng và tự nhiên làm nổi bật phạm vi của thiết kế hoặc hoạt động đó.
Điều tôi lưu ý là loại hoạt động thường bắt đầu bằng phương pháp BeginXXX()
và EndXXX()
, mặc dù có nhiều hương vị khác nhau, chẳng hạn như thực thi mã không đồng bộ có liên quan đến "bắt đầu" và "tham gia".
Lấy ví dụ ngây thơ này.
webDataOperation.Start();
GetContentFromHardDrive();
webDataOperation.Join();
// Perform operation that requires data from both sources
Nếu phương thức bắt đầu trả lại đối tượng có phương pháp tham gia là IDisposable.Dispose
.
using(webDataOperation.Start()) {
GetContentFromHardDrive();
}
// Perform operation that requires data from both sources
Hoặc, tốt hơn hết, những gì tôi đặc biệt có trong tâm trí: Tôi có một đối tượng đồ họa mà không có chuyên môn cao blitting và có một Begin()
và End()
phương pháp (một thiết kế cũng có mặt trong DirectX và XNA). Thay vào đó ...
using(blitter.BlitOperation()) {
// Do work
}
// Use result
Nó có vẻ là tự nhiên hơn và có thể đọc được, nhưng là không đi được, nhìn thấy vì nó sử dụng giao diện IDisposable
và using
tuyên bố cho các mục đích ngoài ý muốn? Nói cách khác, điều này có ngang bằng với việc o tải xuống toán tử theo cách không trực quan không?
Tại sao không chỉ sử dụng {lúc bắt đầu và} ở cuối? Điều này cung cấp phạm vi mà không lạm dụng bằng cách sử dụng. – cja