Trong C#, bạn nên kế thừa interface IDisposable
cho một class khi class đó sử dụng tài nguyên không quản lý như tệp tin, socket, cơ sở dữ liệu, hoặc bất kỳ tài nguyên nào cần được giải phóng một cách rõ ràng và đúng đắn sau khi không còn cần sử dụng nữa. Interface IDisposable
định nghĩa một phương thức Dispose()
mà bạn có thể triển khai để thực hiện việc giải phóng tài nguyên này.
Sử dụng IDisposable
là một phần của mô hình quản lý tài nguyên trong C#, giúp tránh rò rỉ tài nguyên và đảm bảo rằng tài nguyên sẽ được giải phóng đúng cách khi không còn cần sử dụng nữa.
Dưới đây là một ví dụ đơn giản về cách triển khai IDisposable
cho một class:
using System; public class MyClass : IDisposable
{ private bool disposed = false; // Constructor public MyClass() { // Khởi tạo và cấp phát tài nguyên không quản lý ở đây } // Phương thức Dispose để giải phóng tài nguyên public void Dispose() { Dispose(true); GC.SuppressFinalize(this); } protected virtual void Dispose(bool disposing) { if (!disposed) { if (disposing) { // Giải phóng tài nguyên quản lý ở đây (nếu có) } // Giải phóng tài nguyên không quản lý ở đây disposed = true; } } // Destructor (finalizer) ~MyClass() { Dispose(false); }
}
Trong ví dụ trên, bạn có thể triển khai phương thức Dispose
để giải phóng tài nguyên không quản lý của class của bạn. Bạn cũng nên triển khai destructor (finalizer) để đảm bảo rằng tài nguyên không quản lý sẽ được giải phóng trong trường hợp class không được Dispose một cách rõ ràng.
Khi bạn sử dụng một instance của class này, bạn nên gọi phương thức Dispose
hoặc sử dụng một khối using
để đảm bảo rằng tài nguyên sẽ được giải phóng đúng cách:
using (var myObject = new MyClass())
{ // Sử dụng myObject ở đây
} // Khi khối using kết thúc, Dispose() sẽ được gọi tự động.
Nhớ luôn gọi Dispose
để giải phóng tài nguyên khi bạn đã hoàn thành việc sử dụng class có IDisposable
.