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); }
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); } }
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 :
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!