Implémentation correcte d'IDisposable
Un utilisateur a signalé avoir été confronté à une erreur d'analyse de code lors de l'implémentation d'IDisposable dans sa base de code. Pour comprendre le problème, examinons le code fourni :
public class User : IDisposable { // ... public void Dispose() { // Clear property values id = 0; name = String.Empty; pass = String.Empty; } }
Le message d'erreur, CA1063, suggère que l'implémentation d'IDisposable est incorrecte. Selon la documentation de Microsoft, vous ne devez implémenter IDisposable que si votre classe contient des ressources non gérées ou des références à des objets jetables. Dans l'extrait de code donné, aucune des propriétés déclarées ne nécessite d'être supprimée.
Pour résoudre ce problème, une implémentation corrigée serait :
public class User : IDisposable { // ... public void Dispose() { Dispose(true); GC.SuppressFinalize(this); } protected virtual void Dispose(bool disposing) { if (disposing) { // In this case, there are no managed resources to dispose } // Also, there are no unmanaged resources to dispose } }
Cette implémentation diffère principalement par son utilisation du protégé mot-clé sur la méthode Dispose. Cela garantit que seules les classes dérivées peuvent utiliser Dispose. L'absence de code de nettoyage dans la méthode Dispose est appropriée puisque la classe elle-même ne contient aucune ressource jetable.
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!