2010-04-14 29 views
8

Giả sử tôi có một phương pháp như vậy:.NET/C# - Vứt bỏ một đối tượng với 'sử dụng' tuyên bố

public byte[] GetThoseBytes() 
{ 
    using (System.IO.MemoryStream ms = new System.IO.MemoryStream()) 
    { 
     ms.WriteByte(1); 
     ms.WriteByte(2); 
     return ms.ToArray(); 
    } 
} 

có này vẫn xử lý các đối tượng 'ms'? Tôi đang có những nghi ngờ, có thể vì một cái gì đó được trả về trước khi khối lệnh kết thúc.

Cảm ơn, AJ.

Trả lời

11

Có. using (x = e) { s } là đường cho { x = e; try { s } finally { x.Dispose(); } }

+1

Và trả về bên trong nội dung của try..finally sẽ thực hiện mệnh đề cuối cùng trước khi trả lại thực sự xảy ra. – dthorpe

+0

@dthorpe: Umm, vâng. Rất tiếc :) –

4

Có, Using creates a try..finally block, do đó, nó loại bỏ các ms (và thậm chí không kiểm tra trong trường hợp bạn đặt ns thành null).

+1

(Chỉ cần bỏ qua điều vô nghĩa về "CLR chuyển mã của bạn thành MSIL" trong bài viết đó) –

4

Có, toàn bộ ý tưởng đằng sau câu lệnh Sử dụng là nó tự động phân phối bất kỳ luồng/đối tượng nào bạn đang "sử dụng". thực hiện tốt.

Các vấn đề liên quan