2009-01-02 27 views
6

Tôi đã có một số mã trông như thế này:Trả lại từ bên trong phạm vi của câu lệnh 'sử dụng'?

using (DBDataContext dc = new DBDataContext(ConnectionString)) 
{ 
    Main main = new Main 
    { 
     ClientTime = clientTime 
    }; 
    dc.Mains.InsertOnSubmit(main); 
    dc.SubmitChanges(); 
    return main.ID; 
} 

Nếu tôi trở về từ bên trong một "sử dụng", sẽ bằng cách sử dụng vẫn còn dọn dẹp?

Trả lời

24

Có, và đó là một trong những lợi thế lớn của using.

+0

Đánh dấu câu trả lời này là câu trả lời đúng 100%. – Will

+0

bị cám dỗ là -1 cho trò chơi chữ, nhưng +1 giống nhau;) – johnc

+0

Đó là một hình thức đệ quy ... –

3

Có, nó sẽ.

12

Có. Nó thực sự chỉ là tương đương với một tuyên bố try/finally - và các khối finally được thực hiện tuy nhiên các khối thoát try, cho dù thông qua một ngoại lệ, một câu lệnh trả về hoặc chỉ đến cuối khối.

1

Có, tất cả các cá thể đối tượng được khởi tạo trong phần mua tài nguyên của câu lệnh sử dụng sẽ có phương thức Dispose() được gọi tự động.

+0

Chỉ những đối tượng được chỉ định trong phần mua lại tài nguyên của tuyên bố sử dụng được xử lý và * không có gì * đặc biệt xảy ra về thu gom rác thải. –

+0

@Jon, cảm ơn .. Tôi không đủ cụ thể .. do đó làm cho câu trả lời của tôi không chính xác. Sẽ sửa chữa. – Kon

+0

@ fallen888 - Tôi đã thay đổi nó để phản ánh những gì Jon đang nói, hy vọng bạn không nhớ –

0

Có nó sẽ dọn dẹp. Tôi thấy điều này như là cố gắng ass nghèo của C# để hỗ trợ mô hình Resource Acquisition Is Initialization.

+1

RAII là duy nhất cho C++, bởi vì nó vốn được dựa trên các tính năng xây dựng/hủy diệt đối tượng độc đáo của C++. C# đã mượn mẫu từ C++ vì nó tỏ ra hữu ích, nhưng phải sửa đổi mẫu, vì việc xây dựng/hủy đối tượng chồng không hoạt động giống như trong C++. – yfeldblum

+0

@Justice - đó là một phiên bản dài, nhưng hữu ích hơn nhiều, "nỗ lực ass kém". –

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