Maison > développement back-end > C++ > Quand devriez-vous implémenter IDisposable en C# ?

Quand devriez-vous implémenter IDisposable en C# ?

DDD
Libérer: 2025-01-04 02:35:42
original
854 Les gens l'ont consulté

When Should You Implement IDisposable in C#?

É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();
    }
}
Copier après la connexion

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();
        }
    }
}
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal