Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> C#

Câu lệnh using trong C# - Quản lý tài nguyên tự động

Câu lệnh using trong C# có hai mục đích chính:

  1. using statement: Quản lý vòng đời đối tượng implement IDisposable, đảm bảo Dispose() được gọi tự động (dù có exception).
  2. using directive: Nhập namespace (using System;).

Bài này tập trung vào using statement để quản lý tài nguyên.

Cơ chế hoạt động

using (ResourceType resource = new ResourceType())
{
    // Sử dụng resource
}
// Tương đương:
ResourceType resource = new ResourceType();
try
{
    // Sử dụng resource
}
finally
{
    if (resource != null)
        resource.Dispose();
}

Ví dụ: Tự giải phóng tài nguyên

using System;

class SystemResource : IDisposable
{
    public void Dispose()
    {
        Console.WriteLine("C - Giải phóng tài nguyên (Dispose)");
    }
}

class Demo
{
    static void Main()
    {
        Console.WriteLine("Bắt đầu");
        using (SystemResource res = new SystemResource())
        {
            Console.WriteLine("A - Trong block using");
        } // Dispose() tự động gọi ở đây
        Console.WriteLine("B - Sau block using");
        Console.ReadKey();
    }
}

Kết quả

Bắt đầu
A - Trong block using
C - Giải phóng tài nguyên (Dispose)
B - Sau block using

Các trường hợp dùng using

  • File I/O: using (var fs = new FileStream(...)), using (var sr = new StreamReader(...))
  • Database: using (var conn = new SqlConnection(...)), using (var cmd = new SqlCommand(...))
  • Graphics: using (var g = Graphics.FromImage(...))
  • Network: using (var client = new HttpClient()) (lưu ý: HttpClient nên dùng singleton)

Using declaration (C# 8.0+)

Không cần block { }, tài nguyên giải phóng ở cuối scope:

using var fs = new FileStream("test.txt", FileMode.Open);
// code...
// fs.Dispose() tự động gọi khi ra khỏi method/scope

Lưu ý: Chỉ dùng cho đối tượng implement IDisposable hoặc IAsyncDisposable.