using
là từ khóa C# hoạt động như một cú pháp-đường để xử lý các đối tượng có thể định dạng được. Theo MSDN
sử dụng khối Xác định phạm vi, bên ngoài một đối tượng hoặc vật thể sẽ được xử lý.
Tuyên bố sử dụng cho phép lập trình viên chỉ định khi nào các đối tượng sử dụng tài nguyên sẽ giải phóng chúng. Đối tượng được cung cấp cho câu lệnh using phải triển khai giao diện IDisposable. Giao diện này cung cấp phương thức Vứt bỏ, nên giải phóng tài nguyên của đối tượng.
Đáng ngạc nhiên ngay cả MSDN cũng không làm rõ cách điều này xảy ra dưới mui xe. Nó chỉ nói rằng đối tượng phải thực hiện giao diện IDisposable cung cấp phương thức Dispose trên đối tượng thực hiện giao diện.Vì vậy, để xử lý đối tượng, nó sẽ cần phải gọi phương thức Dispose trên đối tượng sẽ dọn dẹp và giải phóng các tài nguyên được sử dụng bởi đối tượng.
Hãy xem ví dụ này ..
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace BlogSamples
{
class Program
{
static void Main(string[] args)
{
//Assume that Car is IDisposible.
using (Car myCar = new Car(1))
{
myCar.Run();
}
}
}
}
Compiler chuyển đổi sang mã trông như thế này ..
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace BlogSamples
{
class Program
{
static void Main(string[] args)
{
//Declare myCar object with FullName of the type as seen in IL.
BlogSamples.Car myCar;
//Instantiate the object by calling the constructor, matching the flow of IL.
myCar = new Car(1);
try
{
myCar.Run();
}
finally
{
if(myCar != null)
myCar.Dispose();
}
}
}
}
Để hiểu làm thế nào một cách chính xác bằng cách sử dụng các công trình khối dưới mui xe, tôi khuyên bạn nên bạn đọc điều này blog-post.
http://www.ruchitsurati.net/index.php/2010/07/28/understanding-%E2%80%98using%E2%80%99-block-in-c/
Nguồn
2010-10-03 11:36:59
Tôi không thấy vấn đề với từ khóa yêu cầu "đối số" của nó để triển khai giao diện. 'foreach' cũng là một từ khóa và yêu cầu bộ sưu tập là' IEnumerable'. – sepp2k
@ sepp2k - điểm dành cho người đi bộ: bạn * KHÔNG * cần IEnumerable cho foreach. –
@Marc Gravell: Ý bạn là gì? theo một liên kết msdn nó nói "System.Collections.IEnumerable hoặc System.Collections.Generic.IEnumerable" http://msdn.microsoft.com/en-us/library/ttw7t8t6.aspx –