IDisposable
Contexte : IDisposable est une interface qui fournit un mécanisme pour libérer les ressources non managées (handles de fichiers, connexions bases de données, sockets) de manière déterministe. Le GC .NET ne nettoie que la mémoire managée ; les ressources non managées doivent être libérées explicitement. IDisposable définit une unique méthode Dispose(). Lorsque vous implémentez IDisposable, vous devez également implémenter un finaliseur (destructeur) comme filet de sécurité.
Exemple d’utilisation
Section intitulée « Exemple d’utilisation »using System;using System.IO;
public class ResourceHolder : IDisposable{ private FileStream _fileStream; private bool _disposed = false;
public ResourceHolder(string path) { _fileStream = File.OpenRead(path); }
public void Dispose() { Dispose(true); GC.SuppressFinalize(this); }
protected virtual void Dispose(bool disposing) { if (!_disposed) { if (disposing) { _fileStream?.Dispose(); } _disposed = true; } }
~ResourceHolder() { Dispose(false); }}Sortie console
Section intitulée « Sortie console »// Pas de sortie directe ; Dispose() est appelé automatiquement à la fin d'un bloc using.Remarques importantes
Section intitulée « Remarques importantes »- Appelez toujours
Dispose()quand vous avez fini avec un objetIDisposable. - Utilisez l’instruction
usingpour garantir la libération même en cas d’exception.
Exemple d’utilisation dans le monde réel
Section intitulée « Exemple d’utilisation dans le monde réel »Entrées/sorties fichier – Chaque StreamReader, FileStream ou SqlConnection implémente IDisposable. Disposez-les toujours pour libérer les handles du système d’exploitation.
Voir documentation .NET sur IDisposable.