Implémenter correctement IDisposable avec des précautions supplémentaires
Avec l'avènement d'environnements de programmation sophistiqués comme Visual Studio 2012, les meilleures pratiques sont plus que jamais mises en avant. L'une de ces pratiques consiste à implémenter correctement l'interface IDisposable lorsqu'il s'agit de ressources non gérées.
Dans l'exemple fourni, une classe nommée User implémente IDisposable. Cependant, Code Analysis génère une erreur concernant une implémentation incorrecte. Pour comprendre le problème, il est important de saisir le but d'IDisposable.
Qu'est-ce qu'IDisposable ?
IDisposable permet aux objets de libérer des ressources gérées et non gérées avant d'être récupérés. . Les ressources gérées, telles que la mémoire allouée sur le tas géré, sont automatiquement récupérées par le garbage collector. Cependant, les ressources non gérées, comme les descripteurs de fichiers ou les connexions à une base de données, nécessitent une élimination explicite pour éviter les fuites de ressources.
Implémentation correcte d'IDisposable
Le code fourni implémente IDisposable de la manière suivante :
public void Dispose() { id = 0; name = String.Empty; pass = String.Empty; }
Ce code efface simplement les valeurs de propriété qui peuvent avoir été définies lors de l'instanciation de la classe. Cependant, aucune ressource non gérée n'est supprimée, donc l'implémentation n'est pas correcte selon les règles d'analyse du code.
Implémentation modifiée
La bonne façon d'implémenter IDisposable est illustré ci-dessous :
public void Dispose() { Dispose(true); GC.SuppressFinalize(this); } protected virtual void Dispose(bool disposing) { if (disposing) { // Free managed resources here. } // Free unmanaged resources, if any. }
Dans cette implémentation, la méthode Dispose est scellée comme "Dispose(bool)" pour s'adapter aux deux cas où géré et les ressources non gérées doivent être libérées. La méthode virtuelle protégée Dispose(bool) peut être remplacée dans les classes dérivées pour prendre en charge des exigences de nettoyage supplémentaires. Cela garantit que les ressources non gérées sont correctement éliminées lorsque l'objet n'est plus utilisé.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!