c# – 为什么流处理时,它的作者被处置?

c# – 为什么流处理时,它的作者被处置?,第1张

概述请考虑以下代码: using (var ms = new MemoryStream()){ using(var writer = BinaryWriter(ms)) { writer.Write(/*something*/); writer.Flush(); } Assert.That(ms.Length > 0); // Thr 请考虑以下代码:
using (var ms = new MemoryStream()){    using(var writer = BinaryWriter(ms))    {        writer.Write(/*something*/);        writer.Flush();    }    Assert.That(ms.Length > 0); // Throws ObjectdisposedException}

一方面,一次性物品应该处置它的资源;我得到了,但另一方面,对象没有创建,并且不拥有这个资源,它提供了 – >调用代码应该负责…不?

我不能想到这样的其他情况,但是在任何接收一次性物品的类的框架中它是否符合自己处置的一致性模式?

解决方法 有一个隐含的假设,你每个流只能有一个作者,所以作者为了方便而承担了流的所有权 – 然后你有一件事要清理.

但我同意这并不总是真的,而且经常不方便.一些实现(例如DeflateStream,GZipStream)允许您选择.否则唯一真正的选择是在写入器和底层流之间注入虚拟流; IIRC在Jon Skeet的“MiscUtil”库中有一个NonClosingStreamWrapper,它完全是这样的:http://www.yoda.arachsys.com/csharp/miscutil/

使用方式如下:

using (var ms = new MemoryStream()){    using(var noClose = new NonClosingStreamWrapper(ms))  using(var writer = BinaryWriter(noClose))  {    writer.Write(/*something*/);    writer.Flush();  }  Assert.That(ms.Length > 0);}
总结

以上是内存溢出为你收集整理的c# – 为什么流处理时,它的作者被处置?全部内容,希望文章能够帮你解决c# – 为什么流处理时,它的作者被处置?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1262980.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-08
下一篇 2022-06-08

发表评论

登录后才能评论

评论列表(0条)

保存