繁体   English   中英

为什么Stream.Read不使用out参数?

[英]Why does Stream.Read not use an out parameter?

从我的理解看来, Stream.Read(byte[] buffer, int offset, int count)的buffer参数应该是out参数,因为该值被读入传入的缓冲区,但事实并非如此。

这是什么原因呢? 有什么我要注意的吗?

out当实例从方法内进行分配 ,并通过背出仅使用。 Stream.Read希望程序员在调用该方法之前已经创建了缓冲区。 现有实例只是被传入,实例中的数据正在被修改,而不是对其自身的引用。

虽然out 允许您传入现有实例,但可以保证将有其他实例退出。 实际上,即使它允许您传入现有实例,也无法从方法内部访问其值。 它将参数视为从未分配过。 CS0269使用未分配的参数'值'

如果在方法返回之前不给参数赋值,则会出现编译器错误。 CS0177必须在控制离开当前方法之前将out参数'value'分配给

读取的数据放入一个已经指定的字节数组中。 在这种情况下, buffer已由调用代码实例化,并且数组中可能已具有非零字节。 如果将其指定为out则Read方法将创建一个缓冲区,然后将其返回。 在这种情况下, offsetcount将是多余的,因为它是根据其自身的发现而制成字节数组的,因此它不需要知道在哪里“适合”其读取的数据。

buffer设为out参数将使API的可用性降低,而不会提供任何回报方面的改进。

当前,缓冲区的引用将传递给方法(因为数组是引用类型),并且输出将直接写入数组。

当缓冲区在Stream.Read调用者的外部时, out将防止重要的用例。例如,它使用的某些类的只读属性。

而且,可用性不会有太大的改善,因为当调用方将offsetcount传递给您时,从调用方下面交换缓冲区(可能是为了扩展缓冲区)不是适当的操作过程。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM