C# - C Sharp: using


Khóa học qua video:
Lập trình Python All Lập trình C# All SQL Server All Lập trình C All Java PHP HTML5-CSS3-JavaScript
Đăng ký Hội viên
Tất cả các video dành cho hội viên

Câu lệnh using đảm bảo việc sử dụng đúng phiên bản IDisposable:

var numbers = new List<int>();
using (StreamReader reader = File.OpenText("numbers.txt"))
{
    string line;
    while ((line = reader.ReadLine()) is not null)
    {
        if (int.TryParse(line, out int number))
        {
            numbers.Add(number);
        }
    }
}

Khi trình điều khiển rời khỏi khối câu lệnh using, một thể hiện của IDisposable thu được sẽ được xử lý. Đặc biệt, câu lệnh using đảm bảo rằng một thể hiện dùng một lần sẽ được xử lý ngay cả khi có ngoại lệ xảy ra trong khối câu lệnh using. Trong ví dụ trên, một file đã mở sẽ bị đóng sau khi tất cả các dòng được xử lý.

Sử dụng câu lệnh await using để sử dụng đúng thể hiện IAsyncDisposable:

await using (var resource = new AsyncDisposableExample())
{
    // Use the resource
}

Để biết thêm thông tin về cách sử dụng phiên bản IAsyncDisposable, hãy xem phần Sử dụng async dùng một lần của bài viết Triển khai phương pháp DisposeAsync.

Bạn cũng có thể sử dụng một khai báo using không cần dấu ngoặc nhọn:

static IEnumerable<int> LoadNumbers(string filePath)
{
    using StreamReader reader = File.OpenText(filePath);
    
    var numbers = new List<int>();
    string line;
    while ((line = reader.ReadLine()) is not null)
    {
        if (int.TryParse(line, out int number))
        {
            numbers.Add(number);
        }
    }
    return numbers;
}

Khi được khai báo trong một khai báo using, một biến cục bộ sẽ được xử lý ở cuối phạm vi mà nó được khai báo. Trong ví dụ trên, việc xử lý xảy ra ở cuối phương thức.

Một biến được khai báo bằng câu lệnh using hoặc khai báo là biến chỉ đọc. Bạn không thể gán lại hoặc truyền nó dưới dạng tham số ref hoặc out.

Bạn có thể khai báo nhiều thể hiện cùng loại trong một câu lệnh using, như ví dụ sau:

using (StreamReader numbersFile = File.OpenText("numbers.txt"), wordsFile = File.OpenText("words.txt"))
{
    // Process both files
}

Khi bạn khai báo một số thể hiện trong một câu lệnh using, chúng sẽ được xử lý theo thứ tự khai báo ngược lại.

Bạn cũng có thể sử dụng câu lệnh using và khai báo với một thể hiện của cấu trúc ref phù hợp với mẫu dùng một lần. Nghĩa là, nó có một phương thức của thể hiện Dispose có thể truy cập được, không có tham số và có kiểu trả về void.

Câu lệnh using cũng có thể có dạng sau:

using (expression)
{
    // ...
}

trong đó expression sẽ tạo ra một thể hiện dùng một lần. Ví dụ sau đây chứng minh điều đó:

StreamReader reader = File.OpenText(filePath);

using (reader)
{
    // Process file content
}

Cảnh báo

Trong ví dụ trên, sau khi điều khiển rời khỏi câu lệnh using, thì thể hiện dùng một lần vẫn nằm trong phạm vi trong khi nó đã được xử lý. Nếu bạn tiếp tục sử dụng thể hiện đó thì bạn có thể gặp phải một ngoại lệ, chẳng hạn như ObjectDisposeException. Đó là lý do tại bạn nên khai báo một biến dùng một lần trong câu lệnh using hoặc cùng với câu lệnh using.

» Tiếp: yield
« Trước: Attributes
Khóa học qua video:
Lập trình Python All Lập trình C# All SQL Server All Lập trình C All Java PHP HTML5-CSS3-JavaScript
Đăng ký Hội viên
Tất cả các video dành cho hội viên
Copied !!!