Maison > développement back-end > C++ > Close() ou Dispose() : quelle méthode dois-je utiliser pour les objets Stream ?

Close() ou Dispose() : quelle méthode dois-je utiliser pour les objets Stream ?

Patricia Arquette
Libérer: 2024-12-31 17:05:10
original
513 Les gens l'ont consulté

Close() or Dispose(): Which Method Should I Use for Stream Objects?

Dois-je appeler Close() ou Dispose() pour les objets Stream ?

Les objets Stream, tels que Stream, StreamReader et StreamWriter, implémentez l'interface IDisposable. Ils ont également une méthode publique appelée Close(). La distinction entre ces méthodes peut prêter à confusion.

Implémentation de la méthode

À l'aide de Reflector.NET, nous pouvons examiner les implémentations de la méthode Close() pour StreamWriter et StreamReader :

// StreamWriter
public override void Close()
{
    this.Dispose(true);
    GC.SuppressFinalize(this);
}

// StreamReader
public override void Close()
{
    this.Dispose(true);
}
Copier après la connexion

La méthode Dispose(bool disposing) pour StreamReader :

protected override void Dispose(bool disposing)
{
    if ((this.Closable && disposing) && (this.stream != null))
    {
        this.stream.Close();
    }
    if (this.Closable && (this.stream != null))
    {
        this.stream = null;
        base.Dispose(disposing);
    }
}
Copier après la connexion

De même pour StreamWriter, la méthode Close() appelle simplement Dispose(true) en interne.

Équivalence de Close() et Dispose()

D'après le code, il est évident que vous pouvez appeler à la fois Close() et Dispose() sur les flux sans affecter leur comportement. Ce sont des méthodes équivalentes.

Bonnes pratiques

Bien que Close() et Dispose() soient interchangeables, il est recommandé d'utiliser :

  • using ( ... ) { ... } : Simplifie le nettoyage et évite les fuites de ressources. Cependant, cela peut réduire la lisibilité en raison des accolades imbriquées.
  • use (var stream = ...) { / code / stream.Close(); } : Cette approche combine les avantages de l'utilisation de ( ... ) { ... } et de l'appel explicite de Close(). Il améliore la lisibilité et garantit un nettoyage approprié.

Conclusion

L'utilisation de Close() ou de Dispose() est une question de préférence et de lisibilité. Les deux méthodes sont prises en charge et ont des fonctionnalités équivalentes pour les objets flux. La pratique recommandée consiste à utiliser using ( ... ) { ... } lorsque cela est possible et à appeler explicitement Close() lorsque cela est nécessaire pour améliorer la clarté du code.

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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal