Éliminer de la bonne manière : implémenter IDisposable
L'implémentation d'IDisposable permet la libération déterministe des ressources et des éléments jetables non gérés. Dans votre extrait de code, la classe User ne gère pas les ressources non gérées ni les références jetables, la suppression n'est donc pas nécessaire. Ce problème peut être résolu en marquant la classe comme scellée, empêchant ainsi les classes dérivées de remplacer IDisposable.
Pour un exemple plus détaillé, considérons une classe appelée ResourceManager qui gère à la fois les ressources non gérées (par exemple, les descripteurs de fichiers) et IDisposable. références (par exemple, connexions à une base de données).
Utilisation d'IDisposable avec Unmanaged Ressources :
public class ResourceManager : IDisposable { private FileStream fileStream; public ResourceManager() { // Allocate and open the file handle fileStream = new FileStream("myfile.txt", FileMode.Open); } public void Dispose() { Dispose(true); GC.SuppressFinalize(this); } protected virtual void Dispose(bool disposing) { if (disposing) { // Free managed resources fileStream?.Close(); fileStream?.Dispose(); } // Free native resources fileStream.Dispose(); } }
Utilisation d'IDisposable avec des références jetables :
public class ResourceManager : IDisposable { private DisposableReference reference; public ResourceManager() { // Obtain the disposable reference reference = new DisposableReference(); } public void Dispose() { Dispose(true); GC.SuppressFinalize(this); } protected virtual void Dispose(bool disposing) { if (disposing) { // Free managed resources reference?.Dispose(); } } }
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!